T7HZ EQU 31H定义T7HZ变量,地址为31H
T05SA EQU 32H 定义T05SA变量,地址为32H
T05SB EQU 33H 定义T05SB变量,地址为33H
FLAG BIT 00H定义FLAG为位变量,地址00H
STOP BIT 01H定义STOP为位变量,地址01H
SP1 BIT P1.2定义SP1为位变量,地址P1.2
ORG 00H 定义主函数运行地址00
LJMP START
ORG 0BH 定义中断函数T0运行地址0BH
LJMP INT_T0
START: MOV TMOD,#02H T0定时器工作于方式2,8位自动重装计数器。仅TL0作为计数器,TH0的值不变。TL0溢出, TH0中的值自动装入TL0中.
MOV TH0,#06H定时器说明:时钟频率fosc= 12MHz,分频频率 Fo =12/12 = 1MHz,T = 1/F0 = 1us
MOV TL0,#06H255 - 6 +1 = 250 us
SETB ET0 使能T0中断
SETB EA使能总中断
按键检测以及防抖
NSP:
JB SP1,NSP如果SP1(P1.2)为1,那么一直在这里等待 ,否则执行向下执行。即按键按下后,执行后面程序。
LCALL DELY10MS 调用延迟10ms函数
JB SP1,NSP 如果SP1(P1.2)为1,跳转到NSP行
SETB TR0 启动定时器0
MOV T5HZ,#00H
MOV T7HZ,#00H
MOV T05SA,#00H
MOV T05SB,#00H
CLR FLAG
CLR STOP
JNB STOP,$ 当stop为0时候,一直在这里等待;如果为1的话,执行下一行
LJMP NSP跳转到NSP行
////////////////////////////////////////////////////////////////////////////////////////////////////////拍裂/////
延迟10ms函数
DELY10MS: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
//////////////////////////////物陆/////////////////////罩贺顷/////////////////////////////////////////////////////////
中断T0函数
INT_T0:
INC T05SA
MOV A,T05SA
CJNE A,#110,NEXT 如果A不等于110,等待,否则跳到NEXT行
MOV T05SA,#00H
INC T05SB
MOV A,T05SB
CJNE A,#06,NEXT 如果A不等于6,等待,否则跳到NEXT行
MOV T05SB,#00H
JB FLAG,STP 如果FLAG = 1,那么跳到STP行
CPL FLAG CPL = ~CPL
LJMP NEXT
STP:
SETB STOP STOP = 1
CLR TR0 关闭T0定时器
LJMP DONE 跳到DONE行
NEXT:
JB FLAG,S5HZ如果FLAG= 1,跳到S5HZ行
INC T7HZT7HZ++
MOV A,T7HZ A = T7HZ
CJNE A,#03H,DONE如果A != #03H,跳到DONE
MOV T7HZ,#00H
CPL P0.0 P0.0求反
LJMP DONE跳到DONE
S5HZ:
INC T5HZT5HZ = T5HZ + 1
MOV A,T5HZ A = T5HZ
CJNE A,#04H,DONE 如果A != #04H,跳到DONE
MOV T5HZ,#00H
CPL P0.0 P0.0求反
LJMP DONE
DONE: RETI 中断返回
END
#include <搭运基知谨reg51.h>悄辩
void main()
{
if(P3^2 ==1)
{
P1^4 =1
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)