在LCD上显示的T值总会比我所定时的时间小很多。比如说1S后在LCD上子显示的T不是10000,而是几百而已。我弄了很久,都不明白到底是怎么回事。哪位高手能帮我解决一下?感激不尽。
$regfile = "m16def.dat"
Config Timer1 = Timer , Prescale = 8
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portd.6 , Rs = Portd.3
Enable Interrupts
Enable Timer1
On Ovf1 Lable2
Dim T As Long
Do
Locate 1 , 1
Cls
If T > 10000then
Lcd T
Else
Lcd "**"
End If
Waitms 100
Loop
End
Lable2:
Tcnt1h = &HEE
Tcnt1l = &H8A
T = T + 1
Return
BASCOM AVR哪位高手帮我解答一下
答案:2 悬赏:50 手机版
解决时间 2021-03-16 12:14
- 提问者网友:记得曾经
- 2021-03-15 13:52
最佳答案
- 五星知识达人网友:山君与见山
- 2021-03-15 14:07
是不是熔丝位没有设?
AVR单片机跟51相比很突出的一个特点就是要事先设熔丝位,你可以查一下自己的晶振,然后根据晶振的大小,设置熔丝位,CKSEL,如果是8MHz晶振,直接设1111就好了。其他晶振还要查看相关资料。
AVR单片机跟51相比很突出的一个特点就是要事先设熔丝位,你可以查一下自己的晶振,然后根据晶振的大小,设置熔丝位,CKSEL,如果是8MHz晶振,直接设1111就好了。其他晶振还要查看相关资料。
全部回答
- 1楼网友:罪歌
- 2021-03-15 15:29
你先求你王姐姐 我就告诉你··好吧··看你很诚恳 告诉你也罢 只不过···自己琢磨去吧··········
提到bascom-avr就先要从basic说起,basic语言就是初学者通用符号指令代码。它很接近于人类语言、像英语、好学、好记。qbasic语言是微软开发的产品,它并不是正中的basic血统,它与最初的basic有着非常相似的地方,但是它强大的功是第一代的basic难以实现的, 还有,因为它是出自微软门下,所以它就成了事实上的basic标准。visual basic是微软近年来的产品,相信大家没有学过它都应该听说过不少吧?这个我就不敢多说了,因为我也没有学过。 bascom-avr编译器的语法高度兼容微软的qb、vb语言,具有界面友好、自带仿真、下载控制等功能。它针对单片机特有资源,集成了很多通用实用的强大语句,如lcd语句、各种通信接口语句等。当然,任何一个软件都具有不尽人意的地方 ,bascom-avr也不另外,它是共享软件,它的免费版只能产生小于4k的代码,但是4k代码对于学习avr单片机以及控制atmega48、attiny26、attiny13等芯片是绰绰有余的 ,还有,它也具有一般软件的bug,但是,只要你勇于发现与思考,你同样也可以设计出满意的程序的 。话也说回来来,我对bascom的了解也只不过是一点点而已,它的更多细节有待大家的不断发现和应用。
另外也提一下bascom-8051,它和bascom-avr一样都是同一个公司的产品,它们在很多方面都基本上是相同的,由于有些型号的51单片机比avr的单片机具有价格上的优势,再加上有不少的爱好者都接触过51单片机,所以学习一下bascom-8051也是不无好处的 。
下面让我们来编写一个最简单的例子,就是让atmega88单片机的‘pc5’引脚驱动led,并且不断闪烁,频率为1hz ,首先,新买的atmega88的振荡源是默认的内部rc振荡电路,频率是1mhz ,我们只要把芯片接上5v电源,第28脚接上led的正负极均可,但是led的另外一个脚就要接上电源相应的负极或者正极,其它的脚悬空就可以了,不过,led最好串联一个100~1k的限流电阻,下面是详细代码:
' **********************************************************************************
' 最左边的这个上标的小点表示它后面的文字是注释语句,编译时不产生代码,直到转行为止
' 注意,所有语句代码的标点符号请用英文标点符号
' **********************************************************************************
' www.avrdiy.com
' 最后修改时间:2006-02-20
' 编译器软件:bascom-avr 1.11.8.1
' 软件说明:入门第一例:闪烁的led
' **********************************************************************************
$regfile = "m88def.dat" ' 定义目标单片机是atmega88
$crystal = 1000000 ' 定义单片机时钟周期是1000000hz
ddrc.5 = 1 ' 定义pc5端口作为输出
led: ' 语句行标号,后面以冒号结尾,在编译器的标签栏label可以看到
portc.5 = 1 ' 定义pc5口输出高电平
waitms 500 ' 等待500ms秒钟
portc.5 = 0 ' 定义pc5口输出的电平
waitms 500
goto led ' 无条件转移到led标签处继续运行
end ' end是主程序结束语句
如果大家手头上还没有可以试验的工具的话并不要紧,我们同样也可以在软件的仿真界面看到运行的模拟结果。首先,让我们运行bascom-avr程序,把上面的代码复制到编译的窗口,界面如下:
图1
然后点击编译按钮,出现保存位置选项,假设我们保存在 “闪烁的 led” 文件夹,名字叫noname1,则如图:
图2
选择保存后,将出现以下画面:
图3
如果顺利通过的话,软件不会出现其它提示,并且返回 主界面,然后我们在文件夹可以看到已经产生了noname1.hex文件,这个就是我们要的烧写文件,确定最终代码大小的文件是noname1.bin文件。
现在我们来打开仿真窗口,点击软件仿真按钮,出现以下窗口,并且点击绿色的“lcd”按键和有一个键盘模样的那个按键,再点击那个三角形的运行按键,看,单片机的pc5端口红色小灯是不是一闪一闪的?
图4
好了,现在,我们应该对bascom-avr有了初步的了解吧?不过,很多人说要少用 goto 语句,那我们可以写成下面的代码:
$regfile = "m88def.dat" ' 定义目标单片机是atmega88
$crystal = 1000000 ' 定义单片机时钟周期是1000000hz
ddrc.5 = 1 ' 定义pc5端口作为输出
do
portc.5 = 1 ' 定义pc5口输出高电平
waitms 500 ' 等待500ms秒钟
portc.5 = 0 ' 定义pc5口输出的电平
waitms 500
loop
end ' end是主程序结束语句
妈的 这都不知道 你学个p编程啊···
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯