;內(nèi)容:按按鍵調(diào)用EEPROM內(nèi)部數(shù)據(jù)通過(guò)數(shù)碼管顯示出來(lái)
;數(shù)碼管段碼接法A-PD0,B-PD1....G-PD6,H-PD7
;數(shù)碼管位碼接法OM0-PC0...COM4-PC3
;按鍵接法行PA.4-PA.7列PA.0-PA.3
;完整源碼下載:http://www.torrancerestoration.com/f/hteepr.rar
;1.內(nèi)部EEPROM寫(xiě)與讀操作
;2.4*4按鍵
;3.存儲(chǔ)區(qū)切換
include HT66F50.inc
ORG0000H
JMPA1
ORG0014H ;多功能中斷入口地址
JMPZD1
ORG002DH
Q1:
DC03FH; 0
DC006H; 1
DC05BH; 2
DC04FH; 3
DC066H; 4
DC06DH; 5
DC07DH; 6
DC007H; 7
DC07FH; 8
DC06FH; 9
DC077H; A
DC07CH; B
DC039H; C
DC05EH; D
DC079H; E
DC071H; F
A1:
MOVA,0;顯示內(nèi)容
MOV[8AH],A;第一位數(shù)碼管段碼顯示內(nèi)容寄存器
MOVA,0;顯示內(nèi)容
MOV[8BH],A;第二位數(shù)碼管段碼顯示內(nèi)容寄存器
MOVA,0;顯示內(nèi)容
MOV[8CH],A;第三位數(shù)碼管段碼顯示內(nèi)容寄存器
MOVA,0;顯示內(nèi)容
MOV[8DH],A;第四位數(shù)碼管顯示內(nèi)容寄存器
MOVA,08H;跟CP1C寄存器設(shè)置要求選擇數(shù)據(jù)
MOVCP1C,A;設(shè)置PC口為I/0口而不是中斷口
MOVCP0C,A;設(shè)置PA3不為比較器腳
CLRACERL;設(shè)置PA口不為AD輸入口
CLRPCC;設(shè)置pc 口為輸出口
CLRPDC;設(shè)置PD 口為輸出口
MOVA,1;設(shè)置初始顯示位碼顯示第一位
MOV[80H],A;位碼寄存器
MOVA,8AH;設(shè)置對(duì)應(yīng)第一位段碼寄存器
MOVMP0,A;間接寄存器指針
MOVA,00000000B;設(shè)置TM2 計(jì)數(shù)時(shí)鐘位為fSYS/4
MOVTM2C0,A
MOVA,11000001B ;設(shè)置TM2中斷為定時(shí)/計(jì)數(shù)模式選擇比較器A匹配
MOVTM2C1,A
MOVA,LOW 5000;設(shè)置中斷時(shí)間為5000個(gè)時(shí)鐘周期
MOVTM2AL,A;低8位
MOVA,HIGH 5000;設(shè)置中斷時(shí)間為5000個(gè)時(shí)鐘周期
MOVTM2AH,A;高8位
CLRMF0F;清多功能中斷0標(biāo)志
CLRT2AF;清定時(shí)器2較器A中斷標(biāo)志
SETMF0E;使能多功能0中斷
SETT2AE;使能定時(shí)器2較器A中斷
SETEMI;使能總中斷
SETT2ON;開(kāi)始計(jì)數(shù)
MOVA,16;
MOV[83H],A;設(shè)置寫(xiě)入數(shù)據(jù)數(shù)量
MOVA,0;EEPROM內(nèi)部地址0
MOV[81H],A;
MOVA,0;存入EEPROM數(shù)據(jù)
MOV[82H],A;
A0:
CALLWR1;寫(xiě)數(shù)據(jù)
INC[81H];地址加1
INC[82H];數(shù)據(jù)加1
SDZ[83H];判斷是否寫(xiě)完
JMPA0
A2:
CALLB0;掃描按鍵
JMPA2;
;******************************************
;掃描按鍵子程序
;******************************************
B0:
MOVA,00001111B;設(shè)置PA口高4位為輸出口低4位為輸入口
MOVPAC,A;
MOVPAPU,A;設(shè)置低4位上拉
MOVA,11100000B;設(shè)置掃描第一行PA.4輸出低電平
MOVPA,A;
SZPA.0;判斷第一行第一個(gè)鍵是否按下
JMPB1;否則判斷第二個(gè)鍵
MOVA,0;EEPROM內(nèi)部地址0
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B1:
SZPA.1;判斷第一行第二個(gè)鍵是否按下
JMPB2;否則判斷第3個(gè)鍵
MOVA,1;EEPROM內(nèi)部地址1
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B2:
SZPA.2;判斷第一行第3個(gè)鍵是否按下
JMPB3;否則判斷第4個(gè)鍵
MOVA,2;EEPROM內(nèi)部地址2
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B3:
SZPA.3;判斷第一行第4個(gè)鍵是否按下
JMPB4;否則判斷第5個(gè)鍵
MOVA,3;EEPROM內(nèi)部地址3
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B4:
MOVA,11010000B;設(shè)置掃描第2行PA.5輸出低電平
MOVPA,A;
SZPA.0;判斷第2行第一個(gè)鍵是否按下
JMPB5;否則判斷第6個(gè)鍵
MOVA,4;EEPROM內(nèi)部地址4
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B5:
SZPA.1;判斷第2行第2個(gè)鍵是否按下
JMPB6;否則判斷第7個(gè)鍵
MOVA,5;EEPROM內(nèi)部地址5
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B6:
SZPA.2;判斷第2行第3個(gè)鍵是否按下
JMPB7;否則判斷第8個(gè)鍵
MOVA,6;EEPROM內(nèi)部地址6
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B7:
SZPA.3;判斷第2行第4個(gè)鍵是否按下
JMPB8;否則判斷第9個(gè)鍵
MOVA,7;EEPROM內(nèi)部地址7
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B8:
MOVA,10110000B;設(shè)置掃描第3行PA.6輸出低電平
MOVPA,A;
SZPA.0;判斷第3行第一個(gè)鍵是否按下
JMPB9;否則判斷第10個(gè)鍵
MOVA,8;EEPROM內(nèi)部地址8
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B9:
SZPA.1;判斷第3行第2個(gè)鍵是否按下
JMPB10;否則判斷第11個(gè)鍵
MOVA,9;EEPROM內(nèi)部地址9
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B10:
SZPA.2;判斷第3行第3個(gè)鍵是否按下
JMPB11;否則判斷第12個(gè)鍵
MOVA,10;EEPROM內(nèi)部地址10
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B11:
SZPA.3;判斷第3行第4個(gè)鍵是否按下
JMPB12;否則判斷第13個(gè)鍵
MOVA,11;EEPROM內(nèi)部地址11
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B12:
MOVA,01110000B;設(shè)置掃描第4行PA.7輸出低電平
MOVPA,A;
SZPA.0;判斷第4行第一個(gè)鍵是否按下
JMPB13;否則判斷第14個(gè)鍵
MOVA,12;EEPROM內(nèi)部地址12
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B13:
SZPA.1;判斷第4行第2個(gè)鍵是否按下
JMPB14;否則判斷第15個(gè)鍵
MOVA,13;EEPROM內(nèi)部地址13
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B14:
SZPA.2;判斷第4行第3個(gè)鍵是否按下
JMPB15;否則判斷第16個(gè)鍵
MOVA,14;EEPROM內(nèi)部地址14
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B15:
SZPA.3;判斷第4行第4個(gè)鍵是否按下
JMPB16;否則跳出子程序
MOVA,15;EEPROM內(nèi)部地址15
MOV[81H],A;
CALLRD1;讀數(shù)據(jù)
MOVA,[83H];
MOV[8AH],A;顯示數(shù)據(jù)
B16:
RET
;***************************************
;內(nèi)部EEPROM寫(xiě)操作
;***************************************
WR1:
MOVA,[81H];設(shè)置EEPROM存儲(chǔ)地址
MOVEEA,A;EEA為EEPROM地址寄存器
MOVA,[82H];設(shè)置存儲(chǔ)數(shù)據(jù)
MOVEED,A;EED為EEPROM數(shù)據(jù)寄存器
MOVA,40H;EEC(40H)為EEPROM控制寄存器在Bank 1區(qū)
MOVMP1,A;不能直接控制只能通過(guò)間接寄存器MP1控制
MOVA,01H;Bank 1
MOVBP,A;設(shè)置存儲(chǔ)器指針為Bank 1
SETIAR1.2;使能EEPROM寫(xiě)
SETIAR1.3;設(shè)置寫(xiě)周期有效
SZIAR1.2;判斷是否寫(xiě)完成
JMP$-1;
CLRIAR1;禁止寫(xiě)
CLRBP;設(shè)置回Bank 0
RET
;*************************************
;內(nèi)部EEPROM讀操作
;*************************************
RD1:
MOVA,40H;EEC(40H)為EEPROM控制寄存器在Bank 1區(qū)
MOVMP1,A;不能直接控制只能通過(guò)間接寄存器MP1控制
MOVA,[81H];設(shè)置數(shù)據(jù)地址
MOVEEA,A;EEA為EEPROM地址寄存器
MOVA,01H;Bank 1
MOVBP,A;設(shè)置存儲(chǔ)器指針為Bank 1
SETIAR1.1;使能EEPROM讀
SETIAR1.0;設(shè)置讀周期有效
SZIAR1.0;判斷是否讀完成
JMP$-1;
CLRIAR1;
CLRBP;
MOVA,EED;讀取數(shù)據(jù)
MOV[83H],A;
RET;
;*******************************************************
;中斷服務(wù)子程序
;*******************************************************
ZD1:
MOV[0F0H],A;壓棧ACC到0F0H
MOVA,STATUS;
MOV[0F1H],A;壓棧status標(biāo)志寄存器到0F1H
MOVA,BP;壓棧儲(chǔ)存區(qū)指針寄存器BP到0F2H
MOV[0F2H],A;
CLRBP
CLRPC;清PC(清屏幕)
MOVA,Q1;數(shù)據(jù)表地址
CLRTBHP;清數(shù)據(jù)表地址高位否則出錯(cuò)
ADDA,IAR0;利用間接寄存器找到要顯示段碼所在數(shù)據(jù)表的地址
MOVTBLP,A;表格指針寄存器TBLP
TABRDPD;查表并將數(shù)據(jù)存到PD口寄存器
MOVA,[80H];位碼寄存器
MOVPC,A;將位碼寄存器的數(shù)存到PC口寄存器
;段碼和位碼的數(shù)都有了所以數(shù)碼管被點(diǎn)亮
INCMP0;間接寄存器指針加1指向下一個(gè)段碼寄存器
RL[80H];左移位碼寄存器控制下一個(gè)數(shù)碼管
SNZ[80H].5;判斷是否控制完4個(gè)數(shù)碼管
JMPZD2;退出中斷繼續(xù)
MOVA,1;是則從新初始化寄存器數(shù)據(jù)
MOV[80H],A;
MOVA,8AH;千位數(shù)碼管對(duì)應(yīng)寄存器
MOVMP0,A;存到間接寄存器0
ZD2:
MOVA,[0F2H];彈棧后進(jìn)先出先進(jìn)后出
MOVBP,A;彈棧0F2H的數(shù)到儲(chǔ)存區(qū)寄存器BP
MOVA,[0F1H];
MOVSTATUS,A;彈棧0F1H的數(shù)到標(biāo)志寄存器
MOVA,[0F0H];彈棧0F0H的數(shù)到acc
CLRMF0F;清多功能標(biāo)志
CLRT2AF;清定時(shí)器2比較器A標(biāo)志
RETI;中斷返回
;*******************************************************
;延時(shí)子程序
;*******************************************************
M001:
MOVA,1
MOV[85H],A
M002:
MOVA,20
MOV[86H],A
M003:
MOVA,250
MOV[87H],A
M004:
SDZ[87H]
JMPM004
SDZ[86H]
JMPM003
SDZ[85H]
JMPM002
RET
END