单片机实现P3.4口1ms方波与P3.5口1min方波输出

本程序使用单片机实现以下功能:

  • P3.4口输出周期为1ms的方波(采用软件定时)
  • P3.5口输出周期为1min的方波(采用定时中断)

硬件:

  • 单片机 (晶振频率12MHz)

软件:

       ORG 0000H
       SJMP START
       ORG 001BH ;T1中断入口.
       SJMP T1_INT
       ORG 0030H
START:
       MOV 50H,#120  ; 修改此处以实现1分钟中断
       MOV 51H,#30
       JNB P1.0,LOOP1
       JNB P1.1,LOOP2	;按键扫描
       AJMP START

LOOP1:
       JNB P1.0,$	;等待按键松开
       MOV TMOD, #10H   ;设置T1定时方式1
       MOV TH1, #3CH    ;送入初始值.
       MOV TL1, #0B0H   ;定时50MS
       MOV IE, #10001000B ;开放总中断和T1中断.
       SETB TR1           ;启动T1
LP:    JB P1.0,LP	  ;等待按键再次被按下
       JNB P1.0,WAIT	  ;按键被再次按下

WAIT:  JNB P1.0,$	  ;等待按键松开
       CLR TR1		  ;关闭定时器
       JB P1.0,START	  ;返回主程序

T1_INT:
       MOV TH1, #3CH      ;重新送入初始值.
       MOV TL1, #0B0H     ;定时
       DJNZ 50H, T1_INT
       DJNZ 51H, T1_INT   ;等待6s
       CPL P3.5           ;输出方波
       RETI               ;中断返回

LOOP2: JNB P1.1,$         ;等待按键松开
LP1:   ACALL DELAY_500us
       CPL P3.4	          ;取反,生成方波
       JNB P1.1,BACK	  ;按键再次被按下,返回主程序
       JB P1.1,LP1
BACK:  JNB P1.1,$ 
       JB P1.1,START

DELAY_500us:
       MOV R0,#249
       DJNZ R0,$ 
       RET
END

代码说明:

  • LOOP1: 控制P3.5口输出1分钟方波。
    • 使用定时器T1中断,每50ms中断一次。
    • 计数器 50H51H 控制中断次数,实现1分钟的定时。
    • 在中断服务程序 T1_INT 中,对P3.5取反以生成方波。
  • LOOP2: 控制P3.4口输出1ms方波。
    • 使用软件延时 DELAY_500us 实现500us的延时。
    • 在循环中,对P3.4取反以生成方波。

注意:

  • MOV 50H,#20MOV 51H,#30 修改为 MOV 50H,#120MOV 51H,#30 即可将中断循环的周期改为1分钟。
  • 可以根据需要修改延时函数 DELAY_500us 中的延时值,以调整P3.4口输出方波的频率。
单片机实现P3.4口1ms方波与P3.5口1min方波输出

原文地址: https://www.cveoy.top/t/topic/fyvj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录