036 JMP ADCONVERT 037 038 ORG 0X0100 039 ;ADC中斷副程式 040 ADCONVERT: 041 BC INTF,ADIF ;清除INTF中的ADIF旗標 042 MOV A,ADDATAH ;將ADDATAH的資料移至A 043 MOV PORTA,A 044 MOV Y_BUFFER,A 045 CALL HUND 046 CALL DELAY1 ;寫入資料 047 MOV A,#0X30 048 ADD H_COUNTER,A 049 MOV A,H_COUNTER 050 MOV DATABUFFER,A 051 CALL WRITE_LCD 052 CALL DELAY3 053 CALL DELAY1 ;寫入資料 054 MOV A,#0X30 055 ADD T_COUNTER,A 056 MOV A,T_COUNTER 057 MOV DATABUFFER,A 058 CALL WRITE_LCD 059 CALL DELAY3 060 CALL DELAY1 ;寫入資料 061 MOV A,#0X30 062 ADD PIECE,A 063 MOV A,PIECE 064 MOV DATABUFFER,A 065 CALL WRITE_LCD 066 CALL DELAY3 067 CLR H_COUNTER 068 CLR T_COUNTER 069 CLR PIECE 070 BS ADCCR,ADRUN ;ADC轉換開始 071 CALL DELAY ;寫入命令 清除顯示器 072 CALL CLEAR_LCD 073 CALL DELAY1 074 NOP 075 CALL DELAY ;WRITE COMMAND SET DD RAM ~ 16 ~
076 MOV A,#0X80 ;ADDRESS AT THE HEAD OF FIRST LINE 077 MOV COMBUFFER,A 078 CALL WRITE_COMMAND 079 CALL DELAY1 080 NOP 081 RETI 082 083 ;程式開始 084 START: 085 CALL INITIAL ;呼叫INITIAL副程式 086 CALL INITIAL_LCD ;呼叫INITIAL_LCD副程式 087 ;ADC轉換開始 088 AD_START: 089 CALL DELAY ;寫入命令 清除顯示器 090 CALL CLEAR_LCD 091 CALL DELAY1 092 NOP 093 CALL DELAY ;WRITE COMMAND SET DD RAM 094 MOV A,#0X80 ;ADDRESS AT THE HEAD OF FIRST LINE 095 MOV COMBUFFER,A 096 CALL WRITE_COMMAND 097 CALL DELAY1 098 NOP 099 ENI 100 BS ADCCR,ADRUN ;ADC轉換開始 101 JMP $ 102 ;起始副程式;起始ET44M210的動作 103 INITIAL: 104 MOV A,#0X00 105 MOV IOCA,A ;將 PORT A 設為 OUTPUT 106 MOV IOCC,A ;PORTC 設為輸出端 107 MOV IOCD,A ;PORTD 設為輸出端 108 MOV IOCF,A ;PORTF 設為輸出端 109 CLR PORTA 110 CLR PORTC 111 CLR PORTD ;清除PORT D的值 112 CLR PORTF ;清除PORT F的值 113 CLR COMBUFFER ;清除COMBUFFER的值 114 CLR DATABUFFER ;清除DATABUFFER的值 115 CLR TIMER1 ;清除TIMER1的值 ~ 17 ~
116 CLR TIMER2 ;清除TIMER2的值 117 CLR TIMER3 ;清除TIMER3的值 118 CLR H_COUNTER 119 CLR T_COUNTER 120 CLR PIECE 121 BS PORTF,SRCS ;將FLASH RAM除能 122 CLR R41 ;設定R41的初值為00 123 CLR R42 ;設定R42的初值為00 124 CLR PRIE ;清除此暫存器以除能其週邊功能 125 BS PRIE,ADE ;設定週邊功能中的ADC致能 126 CLR ADDATAH ;設定ADDATAH 的初值為00 127 CLR ADDATAL ;設定ADDATAL 的初值為00 128 CLR ADCAIS ;設定ADCAIS 的初值為00 129 MOV A,#CKR ;設定ADC轉換的速率 130 OR A,#0X00 ;設定ADC類比輸入 131 MOV ADCAIS,A ;設定ADC類比輸入及ADC轉換速率 132 MOV A,#ANALOG_CHANNEL ;設定ADC轉換的CHANNEL 133 ADD A,#0B11000000 134 MOV ADCCR,A 135 RET 136 137 ;INITIAL_LCD副程式 138 INITIAL_LCD: 139 MOV A,#0X38 ;寫入命令 功能設定 140 MOV COMBUFFER,A ;0 0 1 DL N F X X 141 CALL WRITE_COMMAND ;DL ->1=8 BITS,0=4BITS 142 CALL DELAY ;N ->1=2 LINES,0=1 LINE 143 ;F ->1=5X10 DOTS,0=5X7 DOTS 144 MOV A,#0X08 ;寫入命令 關閉顯示器 145 MOV COMBUFFER,A ;0 0 0 0 1 D C B 146 CALL WRITE_COMMAND ;D ->1=DISPLAY ON,0=DISPLAY OFF 147 CALL DELAY ;C ->1=CURSOR ON,0=CURSOR OFF 148 ;B ->1=CURSOR BLINK ON,0=CURSOR BLINK OFF 149 MOV A,#0X01 ;寫入命令 清除顯示器 150 MOV COMBUFFER,A 151 CALL WRITE_COMMAND 152 CALL DELAY 153 MOV A,#0X06 ;寫入命令 進入模式設定 154 MOV COMBUFFER,A ;0 0 0 0 0 1 I/D S 155 CALL WRITE_COMMAND ;I/D ->1=INCREMENT,0=DECREMENT ~ 18 ~
156 CALL DELAY ;B ->1=DISPLAY SHIFT WHEN DATA IS WRITEN 157 ; NORMAL OPERATION SET TO ZERO 158 MOV A,#0X0E ;寫入命令 開啟顯示器 159 MOV COMBUFFER,A ;0 0 0 0 1 D C B 160 CALL WRITE_COMMAND ;D ->1=DISPLAY ON,0=DISPLAY OFF 161 CALL DELAY1 ;C ->1=CURSOR ON,0=CURSOR OFF 162 NOP 163 RET 164 165 ;清除顯示器副程式 166 CLEAR_LCD: 167 MOV A,#0X01 ;寫入命令 清除顯示器 168 MOV COMBUFFER,A 169 CALL WRITE_COMMAND 170 CALL DELAY 171 RET 172 173 ;寫入命令副程式 174 WRITE_COMMAND: 175 MOV A,#0X00 176 MOV IOCD,A ;PORTD 設為輸出端 177 MOV A,COMBUFFER ;指令送到資料匯流排 178 MOV PORTD,A 179 BC PORTC,LCMRS== 0 180 NOP ;寫入指令到指令暫存器 181 NOP 182 BS PORTF,LCMEN ;ENABLE LCD MODULE 183 NOP 184 NOP 185 NOP 186 BC PORTF,LCMEN ;DISABLE LCD MODULE 187 CALL DELAY 188 RET 189 190 ;寫入資料副程式 191 WRITE_LCD: 192 MOV A,#0X00 193 MOV IOCD,A ;PORTD 設為輸出端 194 MOV A,DATABUFFER ;資料送到資料匯流 195 MOV PORTD,A ~ 19 ~
196 BS PORTC,LCMRS== 1 197 NOP ;寫入資料到資料暫存器 198 NOP 199 BS PORTF,LCMEN ;ENABLE LCD MODULE 200 NOP 201 NOP 202 NOP 203 BC PORTF,LCMEN ;DISABLE LCD MODULE 204 RET 205 206 ;二進制轉十進制 207 HUND: 208 MOV A,#0X64 209 SUB Y_BUFFER,A 210 JBC STATUS,C,ADD_H 211 INC H_COUNTER 212 JMP HUND 213 ;二進制轉十進制副程式下的LABEL 214 ADD_H: 215 MOV A,#0X64 216 ADD Y_BUFFER,A 217 ;二進制轉十進制副程式下的LABEL 218 TEN: 219 MOV A,#0X0A 220 SUB Y_BUFFER,A 221 JBC STATUS,C,ADDTEN 222 INC T_COUNTER 223 JMP TEN 224 ;二進制轉十進制副程式下的LABEL 225 ADDTEN: 226 MOV A,#0X0A 227 ADD Y_BUFFER,A 228 MOV A,Y_BUFFER 229 MOV PIECE,A 230 RET 231 232 ;延遲副程式 233 DELAY: 234 MOV A,#0X00 235 MOV TIMER1,A ~ 20 ~