📄 shuangjian(dingshi).lst
字号:
1 ; ===========================================
2 ; 中断方式实现内部TCC功能
3 ; 晶振=4MHZ,指令周期为4个时钟
4 ;============================================
5 ;--------------------------------------------------
6 ; 系统变量
7 ;-------------------------------------------------------
8 0001 tcc == 0x01 ; TCC计数器
9 0003 psw == 0x03 ; 状态寄存器
10 0005 port5 == 0x05 ; PORT5端口
11 0005 ioc5 == 0x05 ; port5控制端口
12 000B iocb == 0x0b ; 设置下拉控制器
13 000E IOCE == 0x0E ; WDT控制寄存器
14 000F IOCF == 0x0F ; 中断控制寄存器
15 000F ISR == 0x0F ; 中断状态寄存器
16 ;---------------------------------------------------------------------
17 ;定义变量
18 ;---------------------------------------------------------------------
19 0010 a_buf == 0x10 ; 保存中断前A的值
20 0011 tcc_count == 0x11 ; TCC计数器
21 0012 year == 0x12 ; 年龄,用在按键扫描中
22 0013 flag == 0x13 ; 0位为连击标志位,1位为响应标志位
23 0014 r_key == 0x14
24 00CD num == 205
25 0000 c == 0 ; 进位标志位
26 0002 Z == 2 ; 为0标志位
27 ;----------------------------程序入口地址------------------------------;
28 org 0x00
29 00000 1415 jmp start ; 开始程序入口
30 org 0x08 ; 中断入口地址
31 ;----------------------------------------------------------------------;
32 00008 tcc_int:
33 00008 0050 mov a_buf, a ; 保存A的值
34 00009 180E mov a,@0x0e ; TCC计数初值
35 0000A 0041 mov tcc,a
36 0000B 18FE mov a, @0xfe
37 0000C 02CF and isr, a ; 清中断标志位
38 ;-----------------------------------------------------------------------
39 0000D 102A call key_scan
40 0000E 0551 inc tcc_count ; 每中断一次TCC_Count计数器加1
41 0000F 0E83 jbs psw,z ; 判断TCC_Count是否溢出
42 00010 1413 jmp tcc_out ; 没有溢出
43 00011 18CD mov a,@num
44 00012 0051 mov tcc_count,a
45 ;mov a,@0x01
46 ;xor port5,a ;一秒取反输出(P5.0LED)
47 ;------------------------------------------------------------------------
48
49 ;----------------------------------------------------------------------
50 00013 tcc_out:
51 00013 0410 mov a, a_buf ; 恢复A的值
52 00014 0013 reti ; 中断返回
53 ;---------------------主程序-----------------------------------------------;
54 00015 start:
55 00015 1800 mov a, @0x00
56 00016 000E iow ioce ; 关闭看门狗
57 ;---------------------设置IO口--------------------------------------------
58 00017 1806 mov a,@0x06
59 00018 0005 iow ioc5 ; Port50为输出口,p51,p52位输入口
60 00019 18F9 mov a,@0xf9 ; p61设置下拉电阻
61 0001A 000B iow iocb
62 ;------------------赋初值-------------------------------------------------;
63 0001B 18CD mov a,@num
64 0001C 0051 mov tcc_count,a
65 ;-------------------------------------------------------------------------
66 0001D 00D4 clr r_key
67 0001E 00D2 clr year
68 0001F 00D3 clr flag
69 00020 0A05 bs port5,0
70 ;----------------------------------------------------------------
71 00021 18D0 mov a, @0b11010000 ; 保留不需要设置的状态位
72 00022 1905 or a, @0b00000101 ; 预除数64
73 00023 0002 contw
74 00024 1801 mov a, @0x01 ; 允许计数器中断
75 00025 000F iow iocf
76 00026 0010 eni ; 开中断
77 ;----------------------等待中断----------------------------------------------;
78 00027 main:
79 00027 0000 nop
80 00028 0000 nop
81 00029 main_out:
82 00029 1427 jmp main
83 0002A key_scan:
84 0002A 0405 mov a,port5
85 0002B 0552 inc year
86 0002C 1A06 and a,@0x06
87 0002D 0054 mov r_key,a
88 0002E 0E83 jbs psw,z
89 0002F 143A jmp key_in1
90 00030 1442 jmp key_next
91 00031 key_in:
92 00031 0414 mov a,r_key
93 00032 1B02 xor a,@0x02
94 00033 0E83 jbs psw,z
95 00034 0012 ret
96 00035 0C53 jbc flag,1
97 00036 0012 ret
98 00037 0A05 bs port5,0
99 00038 0A53 bs flag,1
100 00039 0012 ret
101 0003A key_in1:
102 0003A 1B04 xor a,@0x04
103 0003B 0E83 jbs psw,z
104 0003C 1431 jmp key_in
105 0003D 0C93 jbc flag,2
106 0003E 0012 ret
107 0003F 0805 bc port5,0
108 00040 0A93 bs flag,2
109 00041 0012 ret
110 00042 key_next:
111 00042 00D2 clr year
112 00043 00D3 clr flag
113 00044 0012 ret
114
115
116 END
0 Error(s), 0 Warning(s), 0 User Message(s)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -