51单片机编写汇编语言使P0.0和P0.1各接两个LED0和LED1,P3.2和P3.3各接两个开关,将INT0设置为电平触发中断方式,将INT1设置为边沿触发中断方式,如果INT0发生中断,点亮LED0,如果INT1发生中断,点亮LED1,分析两种触发方式的不同点。
时间: 2024-10-23 16:08:35 浏览: 28
51单片机汇编语言P0口接8个LED,中断0和1接按键,闪烁移位程序
在51单片机的汇编语言编程中,实现这个功能需要使用适当的指令来配置IO口、控制LED和开关以及设置中断。这里提供一个基础的示例,假设我们使用8051系列单片机:
首先,我们需要初始化GPIO端口:
```
MOVC A, #0x0F ; P0.0 = 0b00001111 (通用I/O模式)
OUT P0, A ; 设置P0口为输入/输出
MOVC A, #0x30 ; P0.1 = 0b00110000 (通用I/O模式)
OUT P0, A ; 同上
MOVC A, #0xFF ; P3.2 = 0b11111111 (推挽输出,用于开关)
OUT P3, A ; P3.3同理
MOVC A, #0x02 ; INT0为电平触发方式,第2位设为1
MOV B, #0x00
ANL B, #0xFE ; INT0中断允许,清除中断标志
MOV SCON, B ; 写入SCON寄存器
MOVC A, #0x04 ; INT1为边沿触发方式,第4位设为1
MOV B, #0x00
ANL B, #0xFB ; INT1中断允许,清除中断标志
MOV TMOD, B ; 写入TMOD寄存器
```
然后,对于中断处理:
```assembly
组织一个中断服务程序(ISR),例如:
ORG 0x000B ; 对应于INT0中断入口地址
LJMP LED0_ISR ; 跳转到LED0中断处理函数
ISR:
; 处理INT0中断
PUSH ACC ; 保存现场
MOV A, #0x01 ; 点亮LED0
MOV P0, A ; 写入P0.0
POP ACC ; 恢复现场
RETI ; 返回主程序
LED0_ISR:
SJMP $+2 ; 跳过两字节返回指令,直接跳到下一个指令(LED1_ISR)
; 类似地,为INT1中断创建另一个ISR
ORG 0x000D ; 对应于INT1中断入口地址
SJMP LED1_ISR ; 跳转到LED1中断处理函数
LED1_ISR:
; 处理INT1中断
...
```
INT0电平触发方式是指只要INT0引脚变为低电平,就会触发中断。而INT1边沿触发方式则会在INT1引脚边缘变化(上升沿或下降沿)时才触发。
阅读全文