搜索
bottom↓
回复: 1

求教一下义隆单片机汇编程序的问题

[复制链接]

出0入0汤圆

发表于 2011-10-14 21:13:41 | 显示全部楼层 |阅读模式
刚接触义隆单片机,听说eUIDE的C编译系统不好使,所以选择了用汇编写程序,刚写了个小测试程序,结果没能实现预期功能,在此诚心求教啦。  
想实现的功能:   
1.外部中断产生---->开启TCC溢出中断---->2.  
2.TCC溢出中断满10次---->取反P50引脚电平---->TCC溢出中断满10次---->取反P50引脚电平---->……---->外部中断产生---->3.  
3.取反TCC溢出中断使能位---->若是关闭TCC溢出中断则P50置为'1'---->等待再次产生外部中断---->1.
                       ---->若是开启TCC溢出中断---->2.  
编译能通过,下载到片子里得不到预期结果,给出外部中断后P50引脚一直为高电平。
程序如下:  
INCLUDE "EM78P163N.INC"      
     X_INT     ==  R10  
     X_TCC     ==  R3F  
     _DELAY_X1 ==  R18  
     _DELAY_X2 ==  R28  
     ORG 0X000  
     JMP MAIN  
     ORG 0X003  
     JMP EXT_INT  
     ORG 0X009  
     JMP TCC_INT  
EXT_INT:  
     CALL DELAY_10MS   ;延迟10ms消抖  
     JBC PORT6,0  
     JMP EXT_INT_RETI  ;抖动则跳不产生操作,直接跳至结束位置。  
     COM X_INT  
EXT_INT_RETI:  
     MOV A,@11111011B  
     AND RF,A  
     RETI  
TCC_INT:  
     DEC X_TCC  
     MOV A,@11111110B  
     AND RF,A  
     RETI   
     ORG 0X030  
MAIN:  
     DISI              ;关闭全局中断  
     MOV A,@0X00       ;P5置为输出  
     IOW IOC5  
     BS PORT5,0        ;P50置1  
     MOV A,@01000000B  ;P61设置为INT引脚  
     IOW WDTCR  
     MOV A,@0XFF       ;P6设置为输入  
     IOW IOC6  
     MOV A,@10001111B  ;INT设置为下降沿触发,TCC时钟为256分频  
     CONTW  
     CLR X_INT         ;X_INT初值为0  
     MOV A,@0X0B       ;X_TCC初值为11  
     MOV X_TCC,A  
     CLR RF            ;清零中断标志位  
     MOV A,@00000100B  ;开启外部INT中断  
     IOW IOCF  
     ENI               ;使能全局中断  
LOOP:  
     JBS X_INT,0  
     JMP LOOP  
     CLR RF            ;清楚中断标志位  
     MOV A,@00000001B  ;开启TCC溢出中断  
     OR IOCF,A  
LOOP1:  
     DJZA X_TCC  
     JMP LOOP1  
     MOV A,@00000001B  
     XOR PORT5,A       ;P50输出取反  
     MOV A,@0X0B       ;重置X_TCC初值  
     MOV X_TCC,A  
     JBC X_INT,0  
     JMP LOOP1  
     MOV A,@11111110B  
     AND IOCF,A        ;关闭TCC溢出中断   
     AND PORT5,A       ;关灯  
     JMP LOOP  
DELAY_10MS:  
     MOV A,@0X50       ;延时变量初值设置  
     MOV _DELAY_X2,A  
DELAY_LOOP2:  
     MOV A,@0XFA  
     MOV _DELAY_X1,A  
DELAY_LOOP1:  
     DJZ _DELAY_X1  
     JMP DELAY_LOOP1  
     DJZ _DELAY_X2  
     JMP DELAY_LOOP2  
     RET

出0入0汤圆

发表于 2011-10-14 23:00:13 | 显示全部楼层
回复【楼主位】zyp568
-----------------------------------------------------------------------

1,首先TCC溢出中断时间是多少,这个寄存器X_TCC 一直在减,减到0再减又到255了,主循环能否刚好在X_TCC为1时执行判断。
2,按你的结构,在TCC中断里给X_TCC加个限制,减到1就不要减了,等待主循环扫描到重新赋值再减
2,建议把主循环里的对P50输出取反的代码,放到TCC_INT中断去完成会好一点
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-7 08:43

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

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