编写程序要求:当 P1.0引脚的电平正跳变时,对 P1.1 的输入脉冲进行计数;当 P1.2引脚的电平负跳变时, 停止计数,并将计数值写入 R0、R1 (高位存 R1,低位存 R0)。
时间: 2024-02-25 22:57:23 浏览: 109
以下是基于8051单片机的汇编代码实现:
```
ORG 0H
MOV P1, #0FFH ; P1口全部设置为输入
CLR P3.1 ; P3.1口设置为输出,用于控制计数器开始/停止
MOV R0, #0H ; 初始化计数器
MOV R1, #0H
LOOP:
JB P1.0, START ; 监测P1.0引脚的电平正跳变
JB P1.2, STOP ; 监测P1.2引脚的电平负跳变
JMP LOOP
START:
SETB P3.1 ; 开始计数
INC R0 ; 计数器加1
MOV A, R0
CJNE A, #0FFH, CONTINUE ; 如果R0没有溢出,跳转到CONTINUE
CLR R0 ; R0溢出,清零R0
INC R1 ; R1加1
CONTINUE:
JB P1.2, STOP ; 监测P1.2引脚的电平负跳变
JB P1.0, START ; 监测P1.0引脚的电平正跳变
JMP LOOP
STOP:
CLR P3.1 ; 停止计数
RET ; 返回
END
```
代码的运行逻辑如下:
- 首先将P1口全部设置为输入,P3.1口设置为输出,用于控制计数器开始/停止,并初始化计数器R0、R1的值为0。
- 进入无限循环LOOP,不断监测P1.0和P1.2引脚的电平变化。
- 当P1.0引脚的电平正跳变时,说明要开始计数,此时将P3.1口设置为高电平,表示开始计数。然后将R0计数器加1,如果R0溢出了,将R1计数器加1,并清零R0。
- 监测P1.2引脚的电平负跳变时,说明要停止计数,此时将P3.1口设置为低电平,表示停止计数。然后将计数值写入R0、R1寄存器中,高位存R1,低位存R0。
- 如果没有检测到电平变化,则继续循环。
需要注意的是,在这个程序中,计数器的值最大为0xFFFF,即65535。如果计数器的值超过了这个范围,则会发生溢出,计数器的值会从0重新开始。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)