单片机智能遥控器系统设计 第8页
IRQ0:
_IRQ1:
_IRQ2:
_IRQ3:
_IRQ4:
PUSH r1,r5 to [sp];
r1=0x0010;
test r1,[P_INT_Ctrl];
JNZ L_IRQ4_1kHz;
r1=0x0070;
goto L_Exit_IRQ4
L_IRQ4_1kHz:
r2=[P_IOB_Data] //保存B口的值
r1=0x0100
TEST r1,r2
JNZ HaveKey //遥控有输入
HaveNoKey:
r1=0x0000
[_KeyFlag]=r1
JMP EndKey
HaveKey:
r1=[_KeyFlag]
CMP r1,0x0000 //是否是上次的那个键?
JNE EndKey
r1=r2&0x3c00
r1=r1 LSR 4
r1=r1 LSR 4
r1=r1 LSR 2
[_KeyFlag]=r1
[_KeyState]=r1 //C程序中清0
EndKey:
r1=r2&0x0007 //开始处理编码输入
TEST r1,0x0001
JZ HaveNoCode
HaveNoCode:
r1=0x0010
L_Exit_IRQ4:
[P_INT_Clear]=r1;
POP r1,r5 from [SP];
RETI
_IRQ5:
_IRQ6:
_IRQ7:
.END
3.5.3 IOA/B口的初始化
IO断口的控制向量组合
注:
*:端口位预设为带下拉电阻的输入引脚;
* *:只有当IOA [7~0]内位的控制字为000,001 和010 时, 相对应位才具有唤醒的功能。
***:悬浮输入作为ADC IOA[6~0] 的输入
端口功能:
P_IOA_Data(读/写)(7000H)
A 端口的数据单元,用于向A 口写入或从A 端口读出数据。当A 口处于输入状态时,读出是读A 口引脚电平状态; 写入是将数据写入A 端口的数据寄存器。当A 口处于输出状态时,写入输出数据到A 端口的数据寄存器。
P_IOA_Buffer (读/写) (7001H)
A 端口的数据向量单元,用于向数据向量寄存器写入或从该寄存器读出数据。当A 口处于输入状态时,写入是将A 端口的数据向量写入A 端口的数据寄存器;读出则是从A 端口数据寄存器内读其数值。当A 口处于输出状态时,写入输出数据到A 端口的数据寄存器。
对输出而言,P_IOA_Data 与P_IOA_Buffer 是一样的.但对输入而言,P_IOA_Data 读的是IO 的值,P_IOA_Buffer 读的是buffer 内的值。假设IOA[0]作为输出,并去接LED阳极(LED 阴极接地)。若P_IOA_Data 的IOA[0]为1。在某些需要较大驱动能力的LED而言,LED 会亮,但IOA[0]会被拉到一个很低的值。此时从P_IOA_Data 读回为0,但P_IOA_Buffer 则为1。读回的意义是是方便做其它的IO 运算。
P_IOA_Dir(读/写)(7002H)
A 端口的方向向量单元,用于用来设置A 口是输入还是输出,该方向控制向量寄存器可以写入或从该寄存器内读出方向控制向量。Dir 位决定了端口位的输入/输出方向:即‘0’为输入,‘1’为输出。
P_IOA_Attrib(读/写)(7003H)
A 端口的属性向量单元,用于A 端口属性向量的设置。
P_IOA_Latch(读)(7004H)
读该单元以锁存A端口上的输入数据,用于进入睡眠状态前的触键唤醒功能的启动(参见睡眠/唤醒部分)。
P_IOB_Data(读/写)(7005H)
B 端口的数据单元,用于向B 口写入或从B 端口读出数据。当B 口处于输入状态时,读出是读B 口引脚电平状态; 写入是将数据写入B 端口的数据寄存器。当B 口处于输出状态时,写入输出数据到B 端口的数据寄存器。
P_IOB_Buffer(读/写)(7006H)
B 端口的数据向量单元,用于向数据寄存器写入或从该寄存器内读出数据。当B 口处于输入状态时,写入是将数据写入B 端口的数据寄存器;读出则是从B 端口数据寄存器里读其数值。当B 口处于输出状态时,写入数据到B 端口的数据寄存器。
P_IOB_Dir(读/写)(7007H)
B 端口的方向向量单元,用于设置IOB 口的状态。‘0’为输入,‘1’为输出。
P_IOB_Attrib(读/写)(7008H)
B 端口的属性向量单元,用于设置IOB 端口的属性。
3.5.4初始化编码
.include hardware.inc
.PUBLIC _InitIOA
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>