?? 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 + -