搜索
bottom↓
回复: 2

请问马老师,我的第一个汇编程序,为什么没结果出来?

[复制链接]

出0入0汤圆

发表于 2007-9-11 14:34:03 | 显示全部楼层 |阅读模式
我用马老师的实验板想实现一个PA0口使LED亮一秒灭一秒的实验,可是就是没结果出来,马老师能否帮我看一下如下的汇编程序,我不知道问题出在哪里!!!
谢谢了!!!

程序如下:
.include "m16def.inc"

.def count   =  r17
.def flag_1s  =  r18
.def temp    =  r19

.org $000
   rjmp  reset                        ;复位处理
   nop
   reti      ;IRQ0 Handler
   nop        ; 不用的可以用RETI和NOP代替
   reti      ;IRQ1 Handler
   nop
   reti      ;Timer2 Compare Handler
   nop
   reti      ;Timer2 Overflow Handler
   nop
   reti      ;Timer1 Capture Handler
   nop
   reti      ;Timer1 Compare-A Handler
   nop
   reti      ;Timer1 Compare-B Handler
   nop
   reti      ;Timer1 Overflow Handler
   nop
   reti      ;Timer0 Overflow Handler
   nop
   reti      ;SPI Transfer Complete Handler
   nop
   reti      ;USART RX Complete Handler
   nop
   reti      ;USART UDR Empty Handler
   nop
   reti      ;USART TX Complete Handler
   nop
   reti      ;ADC Conversion Complete Handler
   nop
   reti      ;E2PROM Ready Handler
   nop
   reti      ;Analog Comparator Handler
   nop
   reti      ;Two-wire Serial Interface Handler
   nop
   reti      ;IRQ2 Handler
   nop
   rjmp     Timer0_com ;Timer0 Compare Handler
   nop
   reti      ;SPM Ready Handler
   nop      

.org $02A
reset:
      ldi r16, high(RAMEND)
          out sph, r16
          ldi r16, low(RAMEND)
          out spl, r16
      
          ldi temp, 0x01
          out ddra, temp
          ser temp
          out porta, temp
      ldi flag_1s, 0x00
          ldi count, 0x7d
;T0初始化
      ldi temp, 0x2c
          out tccr0, temp    ;4M 256分频,CTC模式,

          ldi temp,0x00
          out tcnt0,temp
          
          ldi temp, 0x7c    ;OCR0=125   4000000/256/125=125
          out ocr0, temp

          ldi temp, 0x02
          out timsk, temp
          sei
;主程序
main:
     cpi flag_1s, 0xff
         brne loop
         cbi porta, 0
     rjmp main
loop:
     sbi porta, 0
         rjmp main
         
;T0中断处理
Timer0_com:
     in r16, sreg
         push r16
     
         dec count
         cpi count, 0x00
         brne tim0_ret
         com flag_1s
         
         pop r16
         out sreg, r16
tim0_ret:
     reti

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2007-9-11 22:04:26 | 显示全部楼层
先改一个地方,否则你的堆栈就暴了。

另外你的count初值为0x7d,在中断中减到0后,是否还需要再设置成0x7d?

其它留给你自己分析吧。

;T0中断处理
Timer0_com:
     in r16, sreg
         push r16
      
         dec count
         cpi count, 0x00
         brne tim0_ret
         com flag_1s
tim0_ret:           
         pop r16
         out sreg, r16
         reti

出0入0汤圆

 楼主| 发表于 2007-9-11 23:57:37 | 显示全部楼层
谢谢马老师,问题我已经解决了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-18 12:27

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

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