📄 led12灯大循环程序.asm
字号:
//这是专为谢积广设计的12LED灯大循环显示称序
//MCU使用STC12C2052 DIP封装
//时钟=4MHZ
//设计师: 杨本雄
//联系电话:26735990 13602675760
//email: yangbx@szonline.net
//公司名称: 深圳市雄洋电子科技有限公司
//编制时间 2006年04月4日 修改时间: 2006年04月04日
//*************************************************************************
//编程说明:
//系统工作模式
; 1.对码模式
; 2.工作模式
; 对码模式的操作:
; 1) 和主机连好联线
; 2) 启动主机"呼叫器对码"进入对码模式
; 3) 呼叫器监测到对码接口的起始位后指示灯快闪2秒提示,声音"嘟!--嘟!"2声提示
; 4) 对码完成后,关闭指示灯和声音提示,进入工作模式
// 工作模式的操作:
// 1) 单击"呼叫"键,"嘟!"声提示,指示灯慢闪5秒提示,同时封锁"呼叫"键,禁止再触发
// 2) 单击"消除"键,"嘟!"声提示,同时重新开启"呼叫"键,允许再触发
//****************************************************
//修改说明
//特别注意:
//烧录时,选择低功耗模式和高功耗模式实际上对休眠电流没多大影响
//烧录时,一定要使能看门狗,否则不能唤醒
//****************************************************
//寄存器定义
IPH EQU 0B7H //中断级别控制寄存器
AUXR EQU 8EH //T0,T1
P1M0 EQU 91H //端口P1模式控制寄存器
P1M1 EQU 92H //端口P1模式控制寄存器
P3M0 EQU 0B1H //端口P3模式控制寄存器
P3M1 EQU 0B2H //端口P3模式控制寄存器
WDT_CONTR EQU 0E1H //看门狗
IDLE_CLK EQU 0C7H
//PCON EQU 087H
//#include<reg51.h>
LED1 BIT P1.0
LED2 BIT P1.1
LED3 BIT P1.2
LED4 BIT P1.3
LED5 BIT P1.4
LED6 BIT P1.5
LED7 BIT P1.6
LED8 BIT P1.7
LED9 BIT P3.0
LED10 BIT P3.1
LED11 BIT P3.2 //工作指示灯
LED12 BIT P3.3 //
INPUT BIT P3.4 //
BUZZ BIT P3.5 //
// BIT P3.7 //板上RF模块D1
TI_FLAG BIT 20H.0 //
T_MS_OVER_FLAG BIT 22H.0
RECV_COMD_FLAG BIT 22H.1
T_500MS_OVER_FLAG BIT 22H.2
RD_INPUT_FLAG BIT 22H.3
T_S_OVER_FLAG BIT 22H.4
RECV_RS232_POINT EQU 23H
PORT3_REG EQU 24H
SIM_LED_REG_H EQU 25H //
SIM_LED_REG_L EQU 26H
FLASH_TIME_REG EQU 27H
P3_STATUS_REG EQU 28H
WORK_MODE_REG EQU 29H
TEMP5 EQU 2AH
TEMP6 EQU 2BH
T_100MS_TIMER EQU 2CH
T_500MS_TIMER EQU 2DH
T_MS_TIMER EQU 2EH
T_S_TIMER EQU 2FH
SYSTEM_STATUS EQU 30H //系统LED当前显示状态
RECV_COMD_BUFF EQU 35H //接收命令缓冲区
SP_POINT EQU 50H //堆栈区:60H-7FH
ORG 0000H
AJMP BEGIN
ORG 0003H
AJMP BEGIN
ORG 000BH
AJMP T0_INT
ORG 0023H
AJMP SERIES_PG
ORG 0030H
BEGIN: CLR EA
CLR BUZZ //关闭蜂鸣器
CLR T_500MS_OVER_FLAG
MOV WDT_CONTR,#00000000B //关闭看门狗
MOV SP,#SP_POINT
MOV PCON,#00000000B //PCON地址=87H
//SMOD=PCON.7=1,串口波特率加倍
//SMOD0=PCON.6=1
//LVDF=PCON.5=1
//POF=PCON.4=1
//GF1=PCON.3=1
//GF0=PCON.2=1
//PD=PCON.1=1,进入掉电模式,即POWER DOWN
//IDL=PCON.0=1,进入休眠模式,IDL
MOV PSW,#00H
MOV TCON,#00000101B //外部中断都使用下降沿触发方式,但本程序没用到
MOV TMOD,#21H //T1为自动重装波特率发生器
//T0为16位定时器
MOV SCON,#50H //
MOV TH0,#43H //T0定时器基本定时=100mS
MOV TL0,#33H //实际调试值,勿更改!!!!
//时钟=4MHz时
/*
MOV TL1,#0F3H //设置波特率=9600
MOV TH1,#0F3H //
*/
//时钟=4.9152MHz时
MOV TL1,#0F0H //设置波特率=9600
MOV TH1,#0F0H //
//时钟=11.0592MHz时
/*
MOV TL1,#0CDH //设置波特率=9600
MOV TH1,#0CDH //
*/
MOV P1M0,#00000000B //将P1口设置为高阻输入模式
MOV P1M1,#11111111B
//MOV P1,#00000000B
MOV P3M0,#00010000B //将P3口相应为设置为高阻输入模式
MOV P3M1,#11100011B
MOV IPH,#00010000B //
MOV AUXR,#01000000B //T0x12=AUXR.7=1,定时T0输入时钟不12分频
//T1x12=AUXR.6=1,定时T1输入时钟不12分频
//UART_M0x6=AUXR.5=1,串口速度加倍
//EADCI=AUXR.4=1,允许A/D中断
//ESPI=AUXR.3=1,允许SPI中断
//ELVDI=AUXR.2=1,允许低压中断
MOV 20H,#00H
MOV 21H,#00H
MOV 22H,#00H
//*********工作暂存器初始化*******************
MOV SYSTEM_STATUS,#0
MOV WORK_MODE_REG,#0
//********************************************
//***************标志初始化*******************
CLR RD_INPUT_FLAG
SETB T_MS_OVER_FLAG
//********************************************
MOV IP,#00010000B
MOV IE,#10010010B //EA=IE.7=1,开总中断
//ET2=IE.5=0,禁止定时器2溢出或捕获中断
//ES=IE.4=1,允许串行口中断
//ET1=IE.3=0,禁止T1定时中断,用作波特率发生器
//EX1=IE.2=0,禁止外部中断1
//ET0=IE.1=1,允许T0定时中断
//EX0=IE.0=0,禁止外部中断0
SETB REN
//*********初始化定时器1**********************
MOV T_500MS_TIMER,#4
CLR T_500MS_OVER_FLAG
SETB TR0
//********************************************
//*********初始化定时器2**********************
SETB TR1 //
//********************************************
MOV IDLE_CLK,#00000000B
LCALL START_DISP_PG
MOV PORT3_REG,#10011100B
MOV A,PORT3_REG
MOV P3,A
MOV P3_STATUS_REG,#00000000B
;**************************************************************************************************
MAIN: LCALL READ_SET_MODE_PG
LCALL DRIVER_LED_MODE1_PG //完整
LCALL DRIVER_LED_MODE3_PG //全闪
LCALL DRIVER_LED_MODE4_PG //逐亮
LCALL READ_INPUT_PG
LJMP MAIN
;**************************************************************************************************
READ_SET_MODE_PG: MOV A,P3
ANL A,#00001100B
CJNE A,P3_STATUS_REG,READ_SET_MODE_PG1
RET
READ_SET_MODE_PG1: MOV P3_STATUS_REG,A
JNB ACC.2,READ_SET_MODE_PG2
JNB ACC.3,READ_SET_MODE_PG3
//P6=1,P7=1
MOV P1,#00000000B //先灭
MOV A,#11111100B
ANL P3,A
MOV T_MS_TIMER,#10
CLR T_MS_OVER_FLAG
MOV WORK_MODE_REG,#0 //P6=1,P7=1 模式1
MOV SYSTEM_STATUS,#0
/*
//*************测试*****************************
MOV DPTR,#Mode1
LCALL SEND_TO_RS232
//**********************************************
*/
RET //完整模式
READ_SET_MODE_PG2: JNB ACC.3,READ_SET_MODE_PG4
//P6=0,P7=1 模式2
MOV P1,#0FFH //全亮模式
SETB P3.0
SETB P3.1
MOV WORK_MODE_REG,#1 //P6=0,P7=1 模式2
MOV SYSTEM_STATUS,#0
MOV T_MS_TIMER,#0
CLR T_MS_OVER_FLAG
/*
//*************测试*****************************
MOV DPTR,#Mode2
LCALL SEND_TO_RS232
//**********************************************
*/
RET
//P6=1,P7=0 模式3
READ_SET_MODE_PG3: MOV SIM_LED_REG_H,#00000011B
MOV P1,#11111111B
MOV SIM_LED_REG_L,#11111111B
SETB P3.0
SETB P3.1
SETB PORT3_REG.0
SETB PORT3_REG.1
MOV T_MS_TIMER,#0
MOV WORK_MODE_REG,#2 //P6=1,P7=0 模式3
MOV SYSTEM_STATUS,#0
SETB T_MS_OVER_FLAG //全闪模式
/*
//*************测试*****************************
MOV DPTR,#Mode3
LCALL SEND_TO_RS232
//**********************************************
*/
RET
READ_SET_MODE_PG4: MOV P1,#00000000B //逐亮模式
CLR P3.0
CLR P3.1
MOV T_MS_TIMER,#10
CLR T_MS_OVER_FLAG
MOV SIM_LED_REG_H,#00000000B
MOV SIM_LED_REG_L,#10000000B //注意:P1.7=LED1
MOV WORK_MODE_REG,#3 //P6=0,P7=0 模式4
MOV SYSTEM_STATUS,#0
/*
//*************测试*****************************
MOV DPTR,#Mode4
LCALL SEND_TO_RS232
//**********************************************
*/
RET
;**************************************************************************************************
//模式1 完整模式驱动LED
DRIVER_LED_MODE1_PG: MOV A,WORK_MODE_REG
CJNE A,#0,DRIVER_LED_MODE1_PG00
LJMP DRIVER_LED_MODE1_PG01
DRIVER_LED_MODE1_PG00: RET
DRIVER_LED_MODE1_PG01: JB T_MS_OVER_FLAG,DRIVER_LED_MODE1_PG0
RET
DRIVER_LED_MODE1_PG0: MOV A,SYSTEM_STATUS
CJNE A,#0,DRIVER_LED_MODE1_PG1
//全亮2秒
MOV P1,#0FFH
MOV A,#00000011B
ORL A,PORT3_REG
MOV PORT3_REG,A
MOV P3,A
MOV T_MS_TIMER,#30
CLR T_MS_OVER_FLAG
MOV SIM_LED_REG_H,#00000011B
MOV SIM_LED_REG_L,#11111111B
MOV FLASH_TIME_REG,#8 //闪烁8次
MOV SYSTEM_STATUS,#1
RET
DRIVER_LED_MODE1_PG1: CJNE A,#1,DRIVER_LED_MODE1_PG2
//全闪3秒,频率=3Hz
DJNZ FLASH_TIME_REG,DRIVER_LED_MODE1_PG1_1
MOV P1,#00000000B
MOV A,#11111100B
ANL P3,A
MOV T_MS_TIMER,#2
CLR T_MS_OVER_FLAG
MOV SIM_LED_REG_H,#00000000B
MOV SIM_LED_REG_L,#10000000B //注意:P1.7=LED1
MOV SYSTEM_STATUS,#2
RET
DRIVER_LED_MODE1_PG1_1: MOV A,SIM_LED_REG_L
CPL A
MOV SIM_LED_REG_L,A
MOV P1,A
MOV A,SIM_LED_REG_H
CPL A
ANL A,#00000011B
MOV SIM_LED_REG_H,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -