?? infoprocess-51.asm
字號:
;*************************************************************
AR0 BIT P0.0 ;MT8880
AR1 BIT P0.1 ;MT8880
AR2 BIT P0.2 ;MT8880
AR3 BIT P0.3 ;MT8880
CL BIT P0.4 ;MT8880的CALL
RW BIT P0.5 ;MT8880的RW
RSI BIT P0.6 ;MT8880的RSI
CP BIT P0.7 ;MT8880的CP
MT8880 EQU P0 ;MT8880的控制腳
YX EQU P1 ;MT8816行列地址:REST8816\Y2\Y1\Y0_X3\X2\X1\X0
REST8816 BIT P1.7 ;MT8816復位:高電平復位
CLK BIT P2.0 ;HD7279的CLK
DAT BIT P2.1 ;HD7279的DATA
KEY BIT P2.2 ;HD7279的KEY
;LED2 BIT P2.3 ;未用
;LED1 BIT P2.4 ;未用
BELL BIT P2.5 ;提示音
st BIT P2.6 ;MT8816鎖存線
DI BIT P2.7 ;MT8816開關線 =1開,=0關
PTT_S BIT P3.2 ;手柄的PTT
PTT_D BIT P3.3 ;電臺的PTT
RV BIT P3.4 ;振鈴檢測:0振鈴
LRC BIT P3.5 ;摘掛機控制:0掛機\1摘機
;CD BIT P3.6 ;MSM7512的載波檢測:未用
MOD1 BIT P3.7 ;MSM7512的收發控制=0:;發=1:收
CKQSBZ BIT 20H.0 ;串口收到第1位后=1
CKJSBZ BIT 20H.1 ;串口收到結束位后=1
SYCX BIT 20H.2 ;雙音出現否?=0未出現;=1出現
gh BIT 20H.3 ;改號鍵按下后=1,收到第1個鍵后=0
CLQYD BIT 20H.4 ;20S內收到信息處理器的應答=1 (02H Y 03H)
ZLBZ BIT 20H.5 ;振鈴標志:533Hz=1、666Hz=0
d1czl BIT 20H.6 ;第1次振鈴后標志=1
DATA_IN DATA 21H ;鍵盤值
DATA_OUT DATA 22H ;HD7279用
CKQS EQU 30H ;串口收起始地址
DFHM EQU 40H ;對方電話號碼起始、最長到4FH
BJHM EQU 50H ;本機電話號碼起始、最長到5FH
BJDZ EQU 60H ;本機地址起始、最長到67H
WSZC EQU 74H ;電話位數暫存
ZQH1 EQU 75H ;災情種類暫存
ZQH2 EQU 76H ;災情程度暫存
T0HZC EQU 77H ;T0高位暫存
T0LZC EQU 78H ;T0低位暫存
T0MS EQU 79H ;T0模式:0_1K單音;1_串口收到第1個字節啟動定時;2_撥號后等待回答
GNJZC EQU 7AH ;功能鍵的值暫存
BIT_COUNT DATA 7BH ;HD7279發送、接收控制每BIT的8位
TIMER4 EQU 7CH
TIMER5 EQU 7DH
TIMER6 EQU 7EH
TIMER7 EQU 7FH
;定義與IAP有關的特殊功能寄存器
isp_data equ 0e2h
isp_addrh equ 0e3h
isp_addrl equ 0e4h
isp_cmd equ 0e5h
isp_trig equ 0e6h
isp_contr equ 0e7h
;flash操作等待時間
;enable_isp equ 83h ;<5M
enable_isp equ 82h ;<10M
;enable_isp equ 81h ;<20M
;enable_isp equ 80h ;>20M
;*************************************************************
ORG 0000H
AJMP START
ORG 0003H
AJMP BINGKOU
ORG 000BH
AJMP ZDT0
ORG 0023H
AJMP PCTOMCU
ORG 100H
;**********;初始化************************************************
START: MOV TMOD,#21H ;設置定時器1為方式2(做波特率發生器,晶振7.3728M)
;設置定時器0為方式1(做延時用,晶振7.3728M)
MOV TH1,#0F0H ;T1初始值設置(FC:4800 BIT/S)F0:1200 BIT/S
MOV TL1,#0F0H
MOV TH0,#0FEH ;T0初始值設置(0.5ms)
MOV TL0,#0CCH
MOV T0HZC,TH0 ;T0初始值暫存
MOV T0LZC,TL0
SETB EA ;CPU允許中斷
SETB ES ;允許串口中斷
SETB ET0 ;允許T0中斷
MOV SCON,#50H ;設置串口為方式1(8個數據位)
SETB TR1 ;啟動定時器1
CLR ST ;MT8816鎖存線
;*************************************************************
MOV 20H,#00H ;標志位全部清零
MOV DATA_OUT,#10100100B ;HD7279發復位指令
LCALL SEND
SETB REST8816 ;MT8816復位
LCALL D10MS
CLR REST8816
mov GNJZC,#0Ah ;功能鍵默認為無線狀態
CLR LRC ;有線掛機狀態
CLR PTT_D ;電臺處于收狀態
lcall dgb ;燈全滅
LCALL kgh ;開改號燈
lcall d100ms
lcall dgb ;燈全滅
LCALL kzj ;開轉接燈
lcall d100ms
lcall dgb ;燈全滅
LCALL kyx ;開有線燈
lcall d100ms
lcall dgb ;燈全滅
LCALL kwx ;開無線燈
lcall d100ms
LCALL kdy ;開電源燈
acall ftsy ;自檢完成發2個100ms提示音
lcall d100ms
acall tftsy
lcall d100ms
acall ftsy
lcall d100ms
acall tftsy
;*******MT8880初始化******************************************************
MOV MT8880,#01111111B
SETB CP
CLR CP
MOV MT8880,#01010000B
SETB CP
CLR CP
MOV MT8880,#01010000B
SETB CP
CLR CP
MOV MT8880,#01011000B
SETB CP
CLR CP
MOV MT8880,#01010000B
SETB CP
CLR CP
MOV MT8880,#01111111B
SETB CP
CLR CP
;;;;;;;;主程序循環區域;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START1: JNB KEY,AJ0 ;檢測是否有鍵按下
AJMP PTT0 ;去手柄PTT是否按下?
AJ0: MOV DATA_OUT,#15H ;有鍵按下,發送讀鍵盤指令
ACALL SEND
ACALL RECEIVE
MOV A,DATA_IN
ACALL FTSY ;發提示音:BELL腳輸出作為提示音
JNB KEY,$
acall TFTSY ;停發提示音
;按無線鍵
cjne a,#0AH,AJ1
mov GNJZC,a ;功能鍵的值暫存
AJ0A: lcall DGB ;燈全滅
lcall kwx ;無線燈亮
SETB REST8816 ;復位MT8816
LCALL D10MS
CLR REST8816
SETB MOD1 ;///
lcall d100ms
mov yx,#38h ;電臺的phone到7512的輸入端:收數據用
acall DK ;打開開關
mov yx,#7fh ;7512的RX到單片機:無線數據到單片機
acall DK ;打開開關
mov yx,#02h ;手柄的mic接電臺的mic //00
acall DK ;打開開關
mov yx,#13h ;手柄的phone接電臺的phone //11
acall DK ;打開開關
ajmp START1
;按有線鍵
AJ1: cjne a,#0BH,AJ2
SETB LRC ;摘機
mov GNJZC,a ;功能鍵的值暫存
lcall DGB ;燈全滅
lcall kyx ;有線燈亮
SETB REST8816 ;復位MT8816
LCALL D10MS
CLR REST8816
clr d1czl ;第1次振鈴標志清0
mov yx,#09h ;手柄的mic到放大器1的輸入
acall DK ;打開開關
mov yx,#4ah ;放大器1的輸出到電話的mic
acall DK ;打開開關
mov yx,#51h ;電話的pnoned到手柄的phone
acall DK ;打開開關
mov yx,#58h ;電話的phone到7512的I\O:收有線的數據
acall DK ;打開
mov yx,#7fh ;7512的RX到單片機RX:有線數據到單片機
acall DK ;打開開關
ajmp START1
;按轉接鍵
AJ2: cjne a,#0CH,AJ3
mov GNJZC,a ;功能鍵的值暫存
lcall dgb ;段關閉:除電源燈外全滅
lcall kzj ;轉接燈亮
SETB REST8816 ;復位MT8816
LCALL D10MS
CLR REST8816
mov yx,#51h ;電話的pnoned到手柄的phone:監聽
acall DK ;打開開關
mov yx,#52h ;電話的pnone到電臺的mic:發信號
acall DK ;打開開關
mov yx,#43h ;電臺的phone到電話的mic
acall DK ;打開開關
ajmp START1
;按掛機鍵
AJ3: cjne a,#0DH,AJ4
AJ3a: mov yx,#48h ;7512的輸出到電話的mic ////
acall DK ;打開開關
CLR MOD1 ;7512發
lcall d100ms
MOV SBUF,#02H ;通過電臺發送數據:02H+"T"+03H
JNB TI,$
CLR TI
MOV SBUF,#"G" ;掛機指令,使接入控制器掛機///
JNB TI,$
CLR TI
MOV SBUF,#03H
JNB TI,$
CLR TI
mov yx,#48h ;7512的輸出到電話的mic ////
acall GD ;關斷開關
SETB MOD1 ;7512收
lcall d100ms
clr lrc ;掛機
mov GNJZC,#0AH ;功能鍵默認為無線
AJMP AJ0A ;到無線按鍵
;按*鍵:未用
AJ4: cjne a,#0EH,AJ5
ajmp START1
;按#鍵:未用
AJ5: cjne a,#0FH,AJ6
ajmp START1
;按的0~9鍵
AJ6: mov b,a ;將鍵盤的值暫存便于發雙音是判斷0要發0A
mov a,GNJZC
cjne a,#0BH,AJ8 ;是否是在有線摘機狀態下按的0~9鍵(撥號)
mov yx,#67h ;tSTART0H880到7512的輸入
acall DK ;打開開關
mov yx,#48h ;7512的輸出到電話的mic
acall DK ;打開開關
LCALL CRAB ;發雙音
mov a,b ;取回鍵盤值
ANL A,#0FH
cjne a,#00h,AJ7
MOV A,#0AH ;鍵盤值=0時發0A
AJ7: ORL A,#10H ;發數字低4位決定
MOV MT8880,A
SETB CP
CLR CP
LCALL FSY ;發雙音
LCALL TFSY ;停發雙音
mov yx,#67h ;斷開tSTART0H880到7512的輸入
acall GD
mov yx,#48h ;斷開7512的輸出到電話的mic
acall GD
ajmp START1
AJ8: cjne a,#0FH,AJ14 ;是否是在改號狀態下按的0~9鍵(改號)
jnb gh,AJ13 ;是否是按了改號鍵后的第1個鍵:是則要檫除相應扇區
MOV A,B ;取回該鍵值
cjne a,#1,AJ10 ;是否是修改對方電話號碼?
mov dph,#20h ;第1扇區存對方電話號碼
mov dpl,#00h
AJ9: mov r0,#00h ;從本扇區的00H開始存
lcall sector_erase ;擦除扇區(只能1個扇區一起擦除,只有要寫的字節為空時才能寫入)
lcall delay
CLR GH
ajmp START1
AJ10: cjne a,#2,AJ11 ;是否是修改本機電話號碼?
mov dph,#22h ;第2扇區存本機電話號碼
mov dpl,#00h
ajmp AJ9
AJ11: cjne a,#3,AJ12 ;是否是修改本機地址?
mov dph,#24h ;第3扇區存本機地址
mov dpl,#00h
ajmp AJ9
AJ12: acall ftsy ;按了改號鍵后第1個鍵值不是1、2、3告警
lcall d100ms
acall tftsy
lcall d100ms
acall ftsy
lcall d100ms
acall tftsy
ajmp START1
AJ13: MOV A,B ;取回該鍵值并將該鍵值保存在相應的扇區儲存單元
mov dpl,r0 ;dph的值在檫除時未變
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -