共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电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
分享汽车通信和多媒体总线结构被打赏20分 | |
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
NUCLEO-U083RC学习历程38+串口通过队列的方式输出两个字符串被打赏20分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
分享电控悬架的结构与工作原理(一)被打赏20分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 |