导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→初学者:我的INT0中断为什么 无效? 请朋友们看看是不是程[献]

 *第4613篇: 初学者:我的INT0中断为什么 无效? 请朋友们看看是不是程序错了,错在那里 先谢谢

  
楼 主: 2002年8月20日14:33
 初学者:我的INT0中断为什么 无效? 请朋友们看看是不是程序错了,错在那里  先谢谢
该程序是一个计数器的程序,显示部分正常,就是在P3.2(INT0)输入100Hz方波后,所显示的数
据没有任何反应,请朋友们看看 该程序错在那里了,,请朋友们指点   谢谢

;++++++++++++++++++++计数器程序+++++++++++++
;功能:计数器 ; 3位LED显示
;==============================================
;硬件
;1处理器采用AT89C2051
;2 显示采用LED/3位 (两 位整数,一位小数)
;=======================================================
;资源按排
;T0 用于产生采样定时
;T1 用于显示刷新控制
;INT0 用于外中断(中断方式为:脉冲方式)
;P0口输出BCD数据
;P3输出位驱动
;---------------------------------------------
;第0组通用寄存器主要作为T0定时与计数结果写入控制
;第1组通用寄存器主要作为显示用
;第三组通用寄存器主要作为计数
;================================================
;赋值区(位区)
ADYCW BIT 00H    ;该位为1,计数已经溢出

;-------------------------------------------
;赋值区(数据存储器)
VSB EQU 7FH    ;十位
VGB EQU 7EH    ;个位
VXB EQU 7DH    ;小数
XSSXB EQU 67H    ;显示刷新定时
;------------------------------------------------
ADXB EQU 12H    ;计数结果小数存储器
ADGB EQU 11H    ;计数结果个位存储器
ADSB EQU 10H    ;计数结果十位存储器

;=================================================
ORG 0000H
    AJMP KS    ;去主程序
ORG 0003H    ;INT0外中断入口
    AJMP ZD0;INT0中断处理(计数)
ORG 000BH    ;T0中断入口
    AJMP DS0;T0中断处理(产生主时钟)
ORG 001BH    ;T1中断入口
    AJMP DS1;T1中断处理(显示刷新)
;-------------------------------------------
KS:    ;空操作(起动稳定部分)
    NOP
    NOP
;主程序(所有数据初始化部分0
    MOV VSB,#0    ;初始
    MOV VGB,#0
    MOV VXB,#0
    MOV ADXB,#0    ;AD结果小数存储器
    MOV ADGB,#0    ;AD结果个位存储器
    MOV ADSB,#0    ;AD结果十位存储器
;主程序(功能,控制设置部分)
    MOV SP,#30H    ;设置堆栈
    MOV P3,#0FFH    ;屏蔽显示地址
    MOV P1,#0FFH    ;屏蔽显示数据
    MOV XSSXB,#10    ;设置显示刷新时间
    MOV R5,#222    ;时钟(采样时间)与T0配合
    MOV R6,#30    ;时钟(采样时间)与T1配合
    MOV DPTR,#BCDB    ;将BCD码表装入数据指针(DPTR)
    SETB RS0    ;设置第二组通用寄存器
    MOV R0,#VXB    ;将需要显示的数据起始地址装入
    MOV R2,#1    ;设置显示位的起始位标志
    CLR RS0        ;恢复
    MOV TL0,#106    ;T0定时值设置为150(初值150)
    MOV TH0,#106
    MOV TL1,#6    ;T1刷新时间
    MOV TH1,#6
    MOV IE,#8BH    
    MOV IP,#1    ;T0,INT0中断优先
    MOV TMOD,#22H    ;T0,T1定时方式设置为2
    MOV TCON,#53H    ;起动T0,T1定时器,将INT0触发方式,设置为脉冲方式
    AJMP $        ;死循环
;设置结束
;===========================================================================
DS0:    ;时钟与AD数据存储处理子程序
    PUSH PSW 
    PUSH ACC
    MOV PSW,#0    ;原始
    DJNZ R5,DS0C    ;不等0出
    MOV R5,#222    ;333毫秒
    DJNZ R6,DS0C
    MOV R6,#30    ;999毫秒
    MOV VXB,ADXB    ;AD结果写入电压数据存储器
    MOV VGB,ADGB
    MOV VSB,ADSB
DS0C:
    POP ACC
    POP PSW
RETI
;============================================
DS1:    ;从小数开始显示
    PUSH PSW
    PUSH ACC
    CLR RS1
    SETB RS0    ;使用第二组通用寄存器
    DJNZ XSSXB,DS1C
    MOV XSSXB,#10    ;刷新率定时
    MOV P1,#0FFH    ;显示复位,屏蔽数据
    MOV P3,#0FFH    ;显示复位,屏蔽显示位地址
;刷新第一位
    CJNE R2,#1,XS2    ;检查是否显示到第一位
    MOV A,@R0    ;电流小数数据传到
    MOVC A,@A+DPTR    ;查表
    MOV P1,A    ;传出显示数据
    CLR P3.1    ;显示电流小数
    INC R0        ;显示数据地址加一
    INC R2        ;显示位数加一
XS2:    ;刷新第二位
    CJNE R2,#2,XS3    ;检查是否显示到第二位
    MOV A,@R0
    MOVC A,@A+DPTR
    MOV P1,A    ;传出显示数据
    CLR P1.7    ;显示电流个位
    INC R0
    INC R2
    AJMP DS1C
XS3:    ;刷新第三位
    CJNE R2,#3,DS1C    ;检查是否显示到第三位
    MOV A,@R0
    JZ XS30
    MOVC A,@A+DPTR
    MOV P1,A    ;传出显示数据
    CLR P3.7    ;显示
XS30:
    MOV R0,#VXB    ;重装显示数据起始存储器地址
    MOV R2,#1    ;重装显示起始位地址
    MOV DPTR,#BCDB
DS1C:
    POP ACC
    POP PSW
    RETI
;============================================
ZD0:    ;三位计数
    PUSH PSW
    PUSH ACC
    CLR RS0
    SETB RS1
    JB ADYCW,ZD0C
    INC R0            ;小数加一
    CJNE R0,#10,ZD0C
    MOV R0,#0        ;进位
    INC R1            ;个位加一
    CJNE R1,#10,ZD0C
    MOV R1,#0        ;进位
    INC R2            ;十位加一
    CJNE R2,#10,ZD0C
    MOV R0,#10        ;溢出
    MOV R1,#10
    MOV R2,#10
    SETB ADYCW
ZD0C:
    POP ACC
    POP PSW
RETI
;============================================
BCDB:    ;BCD码表
    DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH
       ;0    1    2    3    4   5   6   7   8   9    -(溢出)
;============================================
END


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:C51编程:UltraEdit-32

[下一篇主题]:初学者:电子资料上传(大家请进)