📄 2g4tx.c
字号:
;---------------------------------------------------------
;A0--------CS
;A1--------SK
;A2--------DI
;A3--------DO
;----------------------------------------------------------
LIST P=6614
ROMSIZE=4096 ;000H-7FFH
;F=4M
IE EQU 00H
IRQ EQU 01H
TM0 EQU 02H
BTM EQU 03H
T0L EQU 04H
T0H EQU 05H
PORTA EQU 08H
PORTB EQU 09H
PCBOND EQU 0AH
PACR EQU 0BH
PBCR EQU 0CH
LPD EQU 0DH
TBR EQU 0EH
INX EQU 0FH
DPL EQU 10H
DPM EQU 11H
DPH EQU 12H
CONPO EQU 13H ;CON THE PORTA AS ALARM UTPUT&HEAVY LOAD&LCD
OXCON EQU 14H ;ALARM ENVELOPE CON
DUTY EQU 15H ;CHANNGE LCD DUTY
LCDCON EQU 16H
;-------------------------------------
TMP EQU 20H
TMP1 EQU 21H
TMP2 EQU 22H
ADDRESSL EQU 23H
ADDRESSH EQU 24H
DATAL EQU 25H
DATAH EQU 26H
DATAL1 EQU 27H
DATAH1 EQU 28H
DCNT1 EQU 29H
DCNT2 EQU 2AH
DCNT3 EQU 2BH
SDATA EQU 2CH
RDATA EQU 2DH
CHNUM EQU 2EH
CHFLAG EQU 2FH
VOL EQU 30H
VFLAG EQU 31H
;-------------------------------------
CNT1 EQU 32H
FAUTOCH EQU 33H
WAPCTRL EQU 34H
MUFLAG EQU 35H
FPWDN EQU 36H
FREAD EQU 37H
VOL1 EQU 38H ;1H-4H
VOL2 EQU 39H ;5H-6H,COL
S123 EQU 3AH
ASBT EQU 3BH
ID0H EQU 3CH
ID0L EQU 3DH
ID1H EQU 3EH
ID1L EQU 3FH
ID2H EQU 40H
ID2L EQU 41H
YEARH EQU 42H
YEARL EQU 43H
MONTHL EQU 44H
MONTHH EQU 45H
FLAGID EQU 46H
DCNT4 EQU 47H
FLAGR EQU 48H
;------------------------------------
FLAGC EQU 49H
;------------------------------------
;PA0----DATA_OUT
;PA1----SEN
;PA2----SDA
;PA3----SCK
;----------------------
ORG 00H
JMP RESET
ORG 01H
RTNI ;JMP INTEXT
ORG 02H
RTNI ;JMP INT0
ORG 03H
RTNI ;JMP INT1
ORG 04H
RTNI
;------------------------------
SETMID:
LDI YEARH,0H;SET THE YEAR AND MONTH
;SUCH AS 0405 MEANS 2004-05
LDI YEARL,4H
LDI MONTHL,5H
LDI MONTHH,0H
RTNI
;------------------------------
;SETID,80,81,82
;50H,51H,52H
;-----------------------
SETCID ;设置厂家码:8866
LDI ID2H,08H
LDI ID2L,08H
LDI ID1H,06H
LDI ID1L,06H
LDI ID0H,00H
LDI ID0L,01H
;----------------------------
LDI ADDRESSL,00H
LDI ADDRESSH,05H
LDA ID0H,0H
STA DATAH,0H
LDA ID0L,0H
STA DATAL,00H
CALL AWRITE
CALL D100MS
LDI ADDRESSL,01H
LDI ADDRESSH,05H
LDA ID1H,0H
STA DATAH,0H
LDA ID1L,0H
STA DATAL,00H ;把厂家码写入EEPROM中
CALL AWRITE
CALL D100MS
LDI ADDRESSL,02H
LDI ADDRESSH,05H
LDA ID2H,0H
STA DATAH,0H
LDA ID2L,0H
STA DATAL,00H
CALL AWRITE
RTNI
;显示AAI
DISPA: ;显示A
LDI DPL,0H
LDI DPM,0H
LDI DPH,6H
LDI TMP,07H
STA INX,0H
LDI DPL,1H
LDI TMP,7H
STA INX,0H
RTNI
DISPAI: ;显示AA
LDI DPL,0H
LDI DPM,0H
LDI DPH,6H
LDI TMP,06H
STA INX,0H
LDI DPL,1H
LDI TMP,0H
STA INX,0H
;-----------------------------
LDI DPL,2H
LDI TMP,07H
STA INX,0H
LDI DPL,3H
LDI TMP,07H
STA INX,0H
RTNI
DISPAAI: ;显示AAI
LDI DPL,0H
LDI DPM,0H
LDI DPH,6H
LDI TMP,06H
STA INX,0H
LDI DPL,1H
LDI TMP,0H
STA INX,0H
;-----------------------------
LDI DPL,2H
LDI TMP,07H
STA INX,0H
LDI DPL,3H
LDI TMP,07H
STA INX,0H
;----------------------------------
LDI DPL,4H
LDI TMP,07H
STA INX,0H
LDI DPL,5H
LDI TMP,07H
STA INX,0H
;----------------------------------
LDI DPL,06H
LDI TMP,0H
STA INX,0H
LDI DPL,7H
LDI TMP,0H
STA INX,0H
RTNI
;----------------------------
;延时100US子程序
;============================
D100US LDI DCNT1,0H
NOP
NOP
D100US1 NOP ;1
NOP ;1
NOP
NOP
SBIM DCNT1,1H ;1
BNZ D100US1 ;1
RTNI
;--------------------------------
;延时子程序
D50MS LDI DCNT2,08H
JMP D100MS1
D100MS LDI DCNT1,0H
D100MS1 LDI DCNT2,0H
D100MS2 LDI DCNT3,0H
D100MS3 SBIM DCNT3,1H
BNZ D100MS3
SBIM DCNT2,1H
BNZ D100MS2
SBIM DCNT1,1H
BNZ D100MS1
RTNI
;--------------------------------
D500MS: LDI DCNT4,5H
JMP D1000MS1
D1000MS:
LDI DCNT4,0AH
D1000MS1:
CALL D100MS
SBIM DCNT4,1H
BNZ D1000MS1
RTNI
;================================
;SHL ;左移4位
;SDATA ;左移数据
;RDATA ;结果数据
;================================
SHL: LDI RDATA,0H
LDA SDATA,0H
BA0 SHL1
JMP SHL2
SHL1: ORIM RDATA,8H
SHL2: LDA SDATA,0H
BA1 SHL3
JMP SHL4
SHL3: ORIM RDATA,4H
SHL4: LDA SDATA,0H
BA2 SHL5
JMP SHL6
SHL5: ORIM RDATA,2H
SHL6: LDA SDATA,0H
BA3 SHL7
JMP SHL8
SHL7: ORIM RDATA,1H
SHL8: RTNI
;--------------------------------------------
;PORTB
;PB0---通道按键
;PB1---声音变大
;PB2---声音变小
;PB3---按2秒自动通道
;按键子程序
;--------------------------------------------
HKEY:
;读B口
LDA PORTB,0H
STA TMP,0H
ANDIM TMP,0CH
BAZ HKEYID
LDI TMP,0FH
LDA PORTB,0H
EOR TMP,0H
;-------------------------------------
BA0 HKEY1 ;HAVE KEY1
BA1 HKEY2 ;HAVE KEY2
BA2 HKEY3 ;HAVE KEY3
BA3 HKEY4 ;HAVE KEY4
RTNI
HKEY1:
CALL D50MS ;D100MS ;D50MS
HKEY10: LDI TMP,0FH
LDA PORTB,0H
EOR TMP,0H
BA0 HKEY11
RTNI
HKEY11:
LDI CNT1,0H
;--------------------------------------
KEY12:
;连续按3秒
CALL D100MS ;D100MS ;D50MS
CALL D100MS
SBIM CNT1,1H
BAZ KEY13
LDI TMP,0FH
LDA PORTB,0H
EOR TMP,0H
BA0 KEY12
ADIM CHNUM,1H ;通道数加1
LDI CHFLAG,0H
NOP
RTNI
KEY13:
RTNI
;-------------------------
LDA FAUTOCH,0H
BA0 KEY14 ;设置自动通道选择
LDI FAUTOCH,1H
LDI TMP,2H
ORM S123,0H
KEY131: CALL DISP
CALL D100MS
LDI TMP,0FH
LDA PORTB,0H
EOR TMP,0H
BA0 KEY131
NOP
LDI ADDRESSL,00H ;0CH ;05H ;0FH
LDI ADDRESSH,00H ;03H ;02H
LDI DATAL,0H
LDI TMP,2H
ORM WAPCTRL,0H
STA DATAH,0H
CALL AWRITE
RTNI
KEY14: ;取消自动通道选择
LDI FAUTOCH,0H
LDI TMP,0DH
ANDM S123,0H
KEY141: CALL DISP
CALL D100MS
LDI TMP,0FH
LDA PORTB,0H
EOR TMP,0H
BA0 KEY141
NOP
;---------------------------------------------------
LDI ADDRESSL,00H ;0CH ;05H ;0FH
LDI ADDRESSH,00H ;03H ;02H
LDI DATAL,0H
LDI TMP,0DH
ANDM WAPCTRL,0H
STA DATAH,0H
CALL AWRITE ;Writ EEPROM
;----------------------------------------------------
RTNI
HKEY2: RTNI ;判断有没有2键
CALL D50MS ;D100MS ;D50MS
HKEY20: LDI TMP,0FH
LDA PORTB,0H ;读B口
EOR TMP,0H
BA1 HKEY21
RTNI
HKEY21:
LDI CNT1,0H
;--------------------------------------
KEY22: ;声音变大
CALL D100MS ;D100MS ;D50MS
CALL D100MS
SBIM CNT1,1H
BAZ KEY23
LDI TMP,0FH
LDA PORTB,0H ;读B口
EOR TMP,0H
BA1 KEY22
LDA MUFLAG,0H
BA0 KEY221
LDI MUFLAG,1H
LDI TMP,1H
ORM S123,0H
CALL DISP ;显示声音大小符号
LDI ADDRESSL,00H ;0CH ;05H ;0FH
LDI ADDRESSH,00H ;03H ;02H
LDI DATAL,0H
LDI TMP,8H
ORM WAPCTRL,0H
STA DATAH,0H
CALL AWRITE
NOP
RTNI
KEY221: LDI MUFLAG,0H
LDI TMP,0EH
ANDM S123,0H
CALL DISP
LDI ADDRESSL,00H ;0CH ;05H ;0FH
LDI ADDRESSH,00H ;03H ;02H
LDI DATAL,0H
LDI TMP,07H
ANDM WAPCTRL,0H
STA DATAH,0H
CALL AWRITE ;写EEPROM
NOP
RTNI
KEY23: LDA FPWDN,0H
BA0 KEY24
LDI FPWDN,1H
LDI TMP,4H
ORM S123,0H
KEY231: CALL DISP ;显示声音大小符号
CALL D100MS
LDI TMP,0FH
LDA PORTB,0H
EOR TMP,0H
BA1 KEY231
NOP
LDI ADDRESSL,00H ;0CH ;05H ;0FH
LDI ADDRESSH,00H ;03H ;02H
LDI DATAL,0H
LDI TMP,4H
ORM WAPCTRL,0H
STA DATAH,0H
CALL AWRITE ;写EEPROM
RTNI
KEY24: LDI FPWDN,0H
LDI TMP,03H
ANDM S123,0H
KEY241: CALL DISP
CALL D100MS
LDI TMP,0FH
LDA PORTB,0H
EOR TMP,0H
BA1 KEY241
NOP
;---------------------------------------------------
LDI ADDRESSL,00H ;0CH ;05H ;0FH
LDI ADDRESSH,00H ;03H ;02H
LDI DATAL,0H
LDI TMP,0AH
ANDM WAPCTRL,0H
STA DATAH,0H
CALL AWRITE ;写WAPCTRL控制字
;---------------------
RTNI
;-------------------------------------
HKEY3: RTNI ;判断有无三键
CALL D50MS ;D100MS ;D50MS
HKEY30: LDI TMP,0FH
LDA PORTB,0H
EOR TMP,0H
BA2 HKEY31
RTNI
HKEY31:
BA3 HKEYID
LDI VFLAG,0H
ADIM VOL,1H
LDI TMP,6H
EOR VOL,0H
BAZ HKEY32
NOP
JMP KEY33
HKEY32:
LDI VOL,5H
NOP
KEY33:
CALL D50MS ;D100MS ;D50MS
LDI TMP,0FH
LDA PORTB,0H
EOR TMP,0H
BA3 HKEYID
BA2 KEY33
RTNI
;-------------------------------------
HKEY4: RTNI
CALL D50MS ;D100MS ;D50MS
HKEY40: LDI TMP,0FH
LDA PORTB,0H
EOR TMP,0H
BA3 HKEY41
RTNI
HKEY41: BA2 HKEYID
LDI VFLAG,0H
LDA VOL,0H
BAZ KEY42
SBIM VOL,1H
BAZ KEY42
NOP
KEY42:
CALL D50MS ;D100MS ;D50MS
LDI TMP,0FH
LDA PORTB,0H
EOR TMP,0H
BA2 HKEYID
BA3 KEY42
RTNI
HKEYID:
CALL D50MS
LDA PORTB,0H
STA TMP,0H
ANDIM TMP,0CH
BNZ HKEYID2
CALL INITLCD
CALL DISPMID
LDA FLAGID
BA0 HKEYID1
LDI FLAGC,1H
LDI FLAGID,1H
LDI VOL,0H
RTNI
HKEYID1:
LDI FLAGID,0H
HKEYID2:
LDI VOL,0H
HKEYID3:
CALL D50MS
LDA PORTB,0H
STA TMP,0H
ANDIM TMP,0CH
BAZ HKEYID3
HKEYID4:
RTNI
;----------------------
AWVOL: ;WRITE VOL
LDI VFLAG,1H ;根据不同的VOL写入不同的参数。
LDA VOL,0H
BAZ AWV1
LDI TMP,1H
EOR VOL,0H
BAZ AWV2
LDI TMP,2H
EOR VOL,0H
BAZ AWV3
LDI TMP,3H
EOR VOL,0H
BAZ AWV4
LDI TMP,4H
EOR VOL,0H
BAZ AWV5
LDI TMP,5H
EOR VOL,0H
BAZ AWV6
RTNI
AWV1: LDI DATAL,01H
LDI DATAH,0AH
JMP AWVOL2
AWV2: LDI DATAL,07H
LDI DATAH,0AH
JMP AWVOL2
AWV3: LDI DATAL,0DH
LDI DATAH,0AH
JMP AWVOL2
AWV4: LDI DATAL,03H
LDI DATAH,0BH
JMP AWVOL2
AWV5: LDI DATAL,09H
LDI DATAH,0BH
JMP AWVOL2
AWV6: LDI DATAL,0FH
LDI DATAH,0BH
AWVOL2:
LDI ADDRESSL,02H
LDI ADDRESSH,00H ;
CALL AWRITE
RTNI
;----------------------
;----------------------
DISPCID: ;显示厂家码子程序
LDI DPL,0H
LDI DPM,0H
LDI DPH,6H
LDI TBR,0H
ADI ID1L,1H
CALL 600H
STA INX,0H
LDI DPL,1H
LDA TBR,0H
STA INX,0H
LDI DPL,2H
LDI TBR,0H
ADI ID1H,1H
CALL 600H
STA INX,0H
LDI DPL,3H
LDA TBR,0H
STA INX,0H
;------------------------------
LDI DPL,4H
LDI TBR,0H
ADI ID2L,1H
CALL 600H
STA INX,0H
LDI DPL,5H
LDA TBR,0H
STA INX,0H
LDI DPL,6H
LDI TBR,0H
ADI ID2H,1H
CALL 600H
STA INX,0H
LDI DPL,7H
LDA TBR,0H
STA INX,0H
RTNI
;---------------------------
DISPMID: ;显示生产日期
CALL SETMID
LDI DPL,0H
LDI DPM,0H
LDI DPH,6H
LDI TBR,0H
ADI MONTHL,1H ;Display month
CALL 600H
STA INX,0H
LDI DPL,1H
LDA TBR,0H
STA INX,0H
LDI DPL,2H
LDI TBR,0H
ADI MONTHH,1H
CALL 600H
STA INX,0H
LDI DPL,3H
LDA TBR,0H
STA INX,0H
;----------------------------------
LDI DPL,4H ;Display year
LDI TBR,0H
ADI YEARL,1H
CALL 600H
STA INX,0H
LDI DPL,5H
LDA TBR,0H
STA INX,0H
LDI DPL,6H
LDI TBR,0H
ADI YEARH,1H
CALL 600H
STA INX,0H
LDI DPL,7H
LDA TBR,0H
STA INX,0H
RTNI
RESET: ;初始化
;----------------------
LDI IE,00H ;SET INTERRUPT ENABLE FLAGS
; LDI IRQ,0H ;SET INTERRUPT REQ FLAGS
CALL D50MS
NOP
LDI OXCON,0H
NOP
CALL D50MS
NOP
LDI OXCON,1H
NOP
CALL D50MS
NOP
LDI OXCON,03H
NOP
CALL D50MS
NOP
;------------------------
LDI DPL,00H
LDI DPM,00H
LDI DPH,06H
LDI PACR,1011B ;设置I/O口
LDI PBCR,0000B
LDI PORTA,0H
LDI PORTB,0H
LDI CHNUM,0H
LDI CHFLAG,0H
LDI VOL,0H
LDI FLAGID,0H
LDI VFLAG,0H
LDI WAPCTRL,0EH
LDI FAUTOCH,1H
LDI MUFLAG,1H
LDI S123,0H
LDI FPWDN,1H
LDI ASBT,0H
LDI CONPO,0H ;初始化LCD
LDI DUTY,1H
LDI LCDCON,0H
CALL INITLCD
CALL DISPA
CALL D1000MS
CALL DISPAI
CALL D1000MS
CALL DISPAAI
CALL D1000MS
CALL D1000MS
;------------------------
CALL SETCID ;设置厂家码
LDI ADDRESSL,00H ;0CH ;05H ;0FH
LDI ADDRESSH,00H ;03H ;02H
LDI DATAL,0H
LDI DATAH,0EH ;初始化EEPROM
CALL AWRITE
START:
CALL HKEY ;检测按键
LDA FLAGC,0H
BA0 STARTP
JMP STARTP2
STARTP:
CALL DISPCID ;显示厂家码
STARTP1:
CALL D50MS
LDA PORTB,0H
STA TMP,0H
ANDIM TMP,0CH
BAZ STARTP1
LDI FLAGC,0H
STARTP2:
START0:
NOP
CALL DISP ;显示
NOP
LDA CHFLAG,0H
BA0 START
LDI CHFLAG,1H
;-----------------------------------
LDI ADDRESSL,03H
LDI ADDRESSH,05H
LDA CHNUM,0H
STA DATAL,0H
LDI DATAH,00H
CALL AWRITE ;写通道数
NOP
LDI ADDRESSL,03H
LDI ADDRESSH,00H
LDI DATAL,00H
LDI DATAH,08H
CALL AWRITE
NOP
CALL SETCID ;设置厂家码
NOP
;-----------------------------
START1:
NOP
JMP START
;----------------------------
LDA FREAD,0H
BA0 SSOUND
JMP START2
;-----------------------------
SSOUND: LDI TMP,0FH ;设置声音参数
EOR DATAL,0H
BNZ SSOUND2
;-----------------------------
SSOUND1:
ANDIM DATAH,3H
LDI TMP,0FH
EOR DATAH,0H
BNZ SSOUND2
JMP START2
SSOUND2:
LDI TMP,1H
EOR DATAL,0H
BNZ SSOUND3
LDA DATAH,0H
BNZ START2
LDI VOL,0H
JMP START2
SSOUND3:
LDI TMP,3H
EOR DATAL,0H
BNZ SSOUND4
LDA DATAH,0H
BNZ START2
LDI VOL,1H
JMP START2
SSOUND4:
LDI TMP,7H
EOR DATAL,0H
BNZ SSOUND5
LDA DATAH,0H
BNZ START2
LDI VOL,2H
JMP START2
SSOUND5:
LDI TMP,0FH
EOR DATAL,0H
BAZ SSOUND6
JMP START2
SSOUND6:
LDI TMP,0FH
EOR DATAH,0H
BAZ START2
ANDIM DATAH,03H
LDA DATAH,0H
BNZ SSOUND7
LDI VOL,3H
JMP START2
SSOUND7:
LDI TMP,1H
EOR DATAH,0H
BNZ SSOUND8
LDI VOL,4H
JMP START2
SSOUND8:
LDI TMP,3H
EOR DATAH,0H
BNZ SSOUND9
LDI VOL,5H
SSOUND9:
;--------------------------
START2:
LDA FAUTOCH,0H
BA0 SAUCH
JMP START
SAUCH:
;----------------------------
LDI ADDRESSL,3H
LDI ADDRESSH,5H
CALL AWREAD ;读通道值
LDA FREAD,0H
BA0 SAUCH1
JMP START
SAUCH1:
LDA DATAL,0H
STA CHNUM,0H
JMP START
;------------------------
INITLCD: ;初始化LCD
LDI DPL,0H
LDI DPM,0H
LDI DPH,06H
CLEAR: ;清LCD
LDI TMP,0H
STA INX,00H
ADIM DPL,1H
BNC CLEAR
ADIM DPM,1H
SBI DPM,2H
BNZ CLEAR
RTNI
;---------------------------
DISP: ;CH
LDI DPL,6H ;Display ch
LDI DPM,0H
LDI DPH,6H
LDI TMP,09H
STA INX,0H
LDI DPL,7H
LDI TMP,05H
STA INX,0H
;---------------------------
LDI DPL,4H
LDI TMP,6H
STA INX,0H
LDI DPL,5H
LDI TMP,7H
STA INX,0H
NOP
;----------------------------
;:
LDI DPL,09H
LDI TMP,4H
ORM VOL2,0H
STA INX,0H
NOP
;----------------------------
LDI TMP,0H
EOR CHNUM,0H
BAZ CH01
;----------------------------
LDI TMP,1H
EOR CHNUM,0H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -