共2条
1/1 1 跳转至页
mega8 mega8的菜鸟问题,恳请大家帮忙
问
大家好,承蒙大家的帮忙,现在已经能对MEGA8编程了,但是编程后校验通不过,出现-44错误,不过读出来和源程序程序对照,是一样的,现在编了一个小程序练练手,在AVRSTUDIO3.56中模拟执行通过,I/O口电平变化,延时时间都正常,但下载到MEGA8中后运行不正常,不知道是芯片问题,还是程序问题,或者我的电路有问题,电路我接了模拟数字地,模拟数字2个电压,5V,复位端曾用过10K和1UF电容,也用过2K电阻接到RST和VCC端,熔丝位没有动,检查过是默认值。是用内部晶振,1M。
附程序,第一个测试用的,大家千万不要笑:
.include "m8def.inc"
.org $0000
rjmp start
.org $0100
start :ldi r16,0x02 ;设置堆栈
out sph,r16
ldi r16,0xff
out spl,r16
ldi r16,0xff ;定义B口为输出
out ddrb,r16
ldi r16,49
xunhuan :cbi portb,0 ;pb0=0,led灭
call delay ;延时1s
sbi portb,0 ;pb0=1,led亮
call delay ;延时1s
rjmp xunhuan
delay :push r16 ;通用延时子程序,这里约1秒
l0 :push r16
l1 :push r16
l2 :push r16
l3 :dec r16
brne l3
pop r16
dec r16
brne l2
pop r16
dec r16
brne l1
pop r16
dec r16
brne l0
pop r16
ret 答 1: 試一下看.好像是delay有問題.
delay:
ldi r18,0x55
delay1:
dec r0
brne delay1
dec r18
brne delay1
試一下看.
答 2: 为何用汇编,不用c?我刚接触mega8,请指教! 答 3: 。请问你的
1。“编程后校验通不过,出现-44错误”是啥意思?(我记得没错的话,这是提示程序下载失败!)
2。你确定你的程序下载到了MEGA8了吗?
3。另外你的:
ldi r16,0x02 ;设置堆栈
out sph,r16
ldi r16,0xff
out spl,r16
虽不是主要问题(“浪费”了一部分RAM),我建议你采用以下设置:
ldi r16,low(ramend)
out spl,r16
ldi r16,high(ramend)
out sph,r16
这样,程序的移植性会好些!
4。我最怀疑的是你的程序没有下载到目标IC上,可能你的目标IC熔丝配置成了外部有源振荡器或者是你的IC加了密!
答 4: 再补充一问再补充一问:你是怎样把“读出来的数据”和“*.hex”的数据相比较的呢?然后得出“数据一样”这个结论呢? 答 5: 99%是程序没有下载成功 答 6: RE:延时具体赋值啊,不用PUSH,POP,这样你都糊涂了!同时检查一下是不是片子一直在复位啊!! 答 7: 谢谢各位的回答!谢谢各位的回答!
COKE:DELAY程序是双龙书上的通用延时程序,我都是照抄的,检查了N遍,在AVRSTUDIO3。56里调试,在观察窗口里看到的延时时间和书上描述的完全一样。应该不会有错。
康1209:我是把从芯片读出来的数据和源程序的程序逐个字节对照,反正也就30多个字节吗,如果程序没有正确下载到MEGA8,怎么会读出来一样的程序呢?
因为我是绝对的初学者,第一次编程,以前看了好久的书,没有实践过,第一次就碰上这样的事儿,咳,下线以后慢慢查吧,以前自学51也是如此的经历。
谢谢各位,你们费心了! 答 8: 搞定了,谢谢各位。不好意思,以前用51时,芯片在编程时是自动先擦除,然后再编程的,结果自然而然的就把这个习惯带到了AVR上
忘了在编程前先擦除芯片
附程序,第一个测试用的,大家千万不要笑:
.include "m8def.inc"
.org $0000
rjmp start
.org $0100
start :ldi r16,0x02 ;设置堆栈
out sph,r16
ldi r16,0xff
out spl,r16
ldi r16,0xff ;定义B口为输出
out ddrb,r16
ldi r16,49
xunhuan :cbi portb,0 ;pb0=0,led灭
call delay ;延时1s
sbi portb,0 ;pb0=1,led亮
call delay ;延时1s
rjmp xunhuan
delay :push r16 ;通用延时子程序,这里约1秒
l0 :push r16
l1 :push r16
l2 :push r16
l3 :dec r16
brne l3
pop r16
dec r16
brne l2
pop r16
dec r16
brne l1
pop r16
dec r16
brne l0
pop r16
ret 答 1: 試一下看.好像是delay有問題.
delay:
ldi r18,0x55
delay1:
dec r0
brne delay1
dec r18
brne delay1
試一下看.
答 2: 为何用汇编,不用c?我刚接触mega8,请指教! 答 3: 。请问你的
1。“编程后校验通不过,出现-44错误”是啥意思?(我记得没错的话,这是提示程序下载失败!)
2。你确定你的程序下载到了MEGA8了吗?
3。另外你的:
ldi r16,0x02 ;设置堆栈
out sph,r16
ldi r16,0xff
out spl,r16
虽不是主要问题(“浪费”了一部分RAM),我建议你采用以下设置:
ldi r16,low(ramend)
out spl,r16
ldi r16,high(ramend)
out sph,r16
这样,程序的移植性会好些!
4。我最怀疑的是你的程序没有下载到目标IC上,可能你的目标IC熔丝配置成了外部有源振荡器或者是你的IC加了密!
答 4: 再补充一问再补充一问:你是怎样把“读出来的数据”和“*.hex”的数据相比较的呢?然后得出“数据一样”这个结论呢? 答 5: 99%是程序没有下载成功 答 6: RE:延时具体赋值啊,不用PUSH,POP,这样你都糊涂了!同时检查一下是不是片子一直在复位啊!! 答 7: 谢谢各位的回答!谢谢各位的回答!
COKE:DELAY程序是双龙书上的通用延时程序,我都是照抄的,检查了N遍,在AVRSTUDIO3。56里调试,在观察窗口里看到的延时时间和书上描述的完全一样。应该不会有错。
康1209:我是把从芯片读出来的数据和源程序的程序逐个字节对照,反正也就30多个字节吗,如果程序没有正确下载到MEGA8,怎么会读出来一样的程序呢?
因为我是绝对的初学者,第一次编程,以前看了好久的书,没有实践过,第一次就碰上这样的事儿,咳,下线以后慢慢查吧,以前自学51也是如此的经历。
谢谢各位,你们费心了! 答 8: 搞定了,谢谢各位。不好意思,以前用51时,芯片在编程时是自动先擦除,然后再编程的,结果自然而然的就把这个习惯带到了AVR上
忘了在编程前先擦除芯片
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |