搜索
bottom↓
回复: 8

请问cvavr中空操作是_NOP();还应包含什么头文件。

[复制链接]

出0入0汤圆

发表于 2008-8-1 21:41:29 | 显示全部楼层 |阅读模式
同上

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2008-8-1 22:10:27 | 显示全部楼层
你从那里看到cvavr中有空操作函数_NOP()?

出1070入962汤圆

发表于 2008-8-1 22:29:28 | 显示全部楼层
#asm("nop")

出0入0汤圆

发表于 2008-8-2 01:17:52 | 显示全部楼层
2楼讲的是内嵌汇编。

当然,我知道空操作函数_NOP()实际就是执行一条NOP指令。可是CVAVR系统本身不提供_NOP()的(至少到目前我没找到)。这个内嵌的函数好象是在IAR中有。

估计LZ从某处搬个程序,在没有理解和掌握的情况下,放到CVAVR中编译,出问题了。

最不提倡的就是这样的做法和习惯。LZ采用“滴水穿石”作为名字,应该知道怎么样才能“滴水穿石”,需要N年的时间!你可以在数小时内把相当于N年“滴水”的水量浇到石头上,但不会“穿石”。

出0入0汤圆

 楼主| 发表于 2008-8-2 07:21:28 | 显示全部楼层
马老师感谢您的答复。您的每次答复我都能从其中学到东西,我喜欢您的答复。
我现在是靠:自学+马老师的实验板+马老师的书+cvavr+ouravr.为了尽快搞懂问题会找一些类似的实例学习。
为了学习1602 LCD的编程,想在网上找个m16+1602+cvavr的实例没找到,找到了一个c51编的实例,于是就想把它改为cvavr下的程序.其中遇到了空操作,编译时发现还有几个地方有问题,我把那段程序也贴上来,//后的是原来的c51程序。请指点。

//1602 显示字符串程序(C51)
//功能:数码管显示缓冲区的内容
//#include<reg51.h>
//#include<intrins.h>
#include<mega16.h>
#include<delay.h>
#asm
.equ_lcd_port=0x18;  //PORTB数据寄存器地址
#endasm
//    [LCD]     
//    1 GND- 9  GND
//    2 +5V- 10 VCC  
//    3 VLC- LCD HEADER Vo
//    4 RS - 1  PA0 (M16)
//    5 RD - 2  PA1 (M16)
//    6 EN - 3  PA2 (M16)
//   11 D4 - 5  PA4 (M16)
//   12 D5 - 6  PA5 (M16)
//   13 D6 - 7  PA6 (M16)
//   14 D7 - 8  PA7 (M16)
#include <lcd.h>

//typedef unsigned char BYTE;
//typedef unsigned int WORD;
//typedef bit c;
unsigned char a;
unsigned int b;
bit c;

//sbit rs=P2^5;
//sbit rw=P2^6;
//sbit ep=P2^7;

#define rs PORTB.0
#define rw PORTB.1
#define ep PORTB.2

//BYTE code dis1[]={"Qi-Meng"};//显示的内容
//BYTE code dis2[]={“www.51c51.net”};//显示的内容

flash unsigned char dis1[]="Hello World!  ";
flash unsigned char dis2[]="www.ouravr.com  ";

//delay(BYTE ms)  //延时子程序
//{
//    BYTE i;
//    while(ms--)
//    {
//       for(i=0;i<250;i++)
//       {
//          _nop_();
//          _nop_();
//          _nop_();
//          _nop_();
//       }
//    }
//}

// BOOL lcd_bz()    //测试LCD忙碌状态
//{
//   BOOL result;
//   rs=0;
//   rw=1;
//   ep=1;
//   _nop_();
//   _nop_();
//   _nop_();
//   _nop_();
//   result=(BOOL)(P0&0X80);
//   ep=0;
//   return result;
//}

void lcd_bz()    //测试LCD忙碌状态
{
   bit result;
   rs=0;
   rw=1;
   ep=1;
   _NOP();
   _NOP();
   _NOP();
   _NOP();
   result=(c)(PORTB&0x80);
   ep=0;
   return result;
}

//lcd_wcmd(BYTE cmd)   //写入指令数据到LCD
//{
//   while(lcd_bz());
//   rs=0;
//   rw=0;
//   ep=0;
//   _nop_();
//   _nop_();
//   P0=cmd;
//   _nop_();
//   _nop_();
//   _nop_();
//   _nop_();
//   ep=1;
//   _nop_();
//   _nop_();
//   _nop_();
//   _nop_();
//   ep=0;
//}

lcd_wcmd( unsigned char cmd)   //写入指令数据到LCD
{
   while(lcd_bz());
   rs=0;
   rw=0;
   ep=0;
   _NOP();
   _NOP();   
   PORTB=cmd;
   _NOP();
   _NOP();
   _NOP();
   _NOP();  
   ep=1;
   _NOP();
   _NOP();
   _NOP();
   _NOP();
   ep=0;
}

void lcd_pos(unsigned char pos)//设定显示位置
{
   lcd_wcmd(pos|0x80);
}

lcd_wdat( unsigned char dat) //写入字符显示数据到LCD
{
    while(lcd_bz());
    rs=1;
    rw=0;
    ep=0;
    PORTB=dat;
    _NOP();
   _NOP();
   _NOP();
   _NOP();
    ep=1;
    _NOP();
   _NOP();
   _NOP();
   _NOP();
    ep=0;
}

void lcd_initt()  //LCD初始化设定
{
   lcd_wcmd(0x38);
   delay_ms(1);
   lcd_wcmd(0x0c);
   delay_ms(1);
   lcd_wcmd(0x06);
   delay_ms(1);
   lcd_wcmd(0x01);  //清除LCD的显示内容
   delay_ms(1);
}

main()
{
   unsigned char i;
   lcd_initt();      //初始化LCD
   delay_ms(10);
   lcd_pos(4);      //设置显示位置为第1行的第5个字符
   i=0;
   while(dis1!='\0')   //显示字符Qi-Meng
   {
      lcd_wdat(dis1);
      i++;  
   }
   lcd_pos(0x41);     //设置显示位置为第二行第二个字符
   i=0;
   while(dis2!='\0')
   {
      lcd_wdat(dis2);//显示字符“www.51c51.net”
      i++;
   }
   while(1);
}

出0入0汤圆

发表于 2008-8-2 08:58:40 | 显示全部楼层
空操作直接像2楼那样就OK了。马老师的书上就有LCD的例子呀,或者直接看CV的帮助,用它的库函数

出0入0汤圆

发表于 2008-8-2 09:18:10 | 显示全部楼层
1602的程序比较好搞。我现在想搞一个玻璃片液晶的驱动程序。头一次。最不懂就是它不象LED驱动那样,一个数码位就是一个公共端。真不知能不能做成功。

出0入0汤圆

 楼主| 发表于 2008-8-2 12:17:32 | 显示全部楼层
谢谢5楼:马老师书中的例子做过了。我是想学习这些函数是如何写的。明白了#asm("nop")就如同c51中的_nop_();

出0入0汤圆

发表于 2008-8-2 13:00:51 | 显示全部楼层
从学习和打好基础的角度,我赞成和提倡自己学习和掌握编写低层的驱动。只有这样,才能为发展成为“高手”奠定坚实的基础,也才能在实际产品设计中更好的,合理的、灵活的使用系统提供的低层函数。

要做这些,就必须更要沉下心来,踏踏实实,阅读更多的资料,更深入,更详细了解相关硬件的内部和低层结构。这样也更容易知道你的基础到底差在什么地方。

字符LCD的控制模块资料在我的书附带光盘手册中可以找到,已经为有这样意愿的学习者做了准备。

支持lz的意愿,但还是要问一句,你仔细看了这些资料吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 06:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表