久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機21路加熱溫度控制程序(匯編)
[打印本頁]
作者:
daniu
時間:
2014-12-26 22:40
標題:
51單片機21路加熱溫度控制程序(匯編)
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;原理:通過改變加熱管通電和斷電時間比達到控制溫度作用。
;可以獨立設置21路加熱管通斷的百分比值。
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;設置參數方法:同時按下主機面板上的“區域”和“上調”(或“下調”)鍵,
;調到需要設定參數的區域后,停止按按鍵,然后再同時按下“參數”和“上調”(或“下調”)鍵,
;設定該區域的參數,參數設定范圍0~100%,當設定參數為0%時關閉加熱管,
;當設定參數為100%時加熱管常通電,當設定參數為50%時加熱管通斷時間比為1:1(即各50%),
;其他參數以此類推。
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
SC01# EQU P0.0 ;1#輸出
SC02# EQU P0.1 ;2#輸出,以下雷同,共24路輸出
SC03# EQU P0.2
SC04# EQU P0.3
SC05# EQU P0.4
SC06# EQU P0.5
SC07# EQU P0.6
SC08# EQU P0.7
SC09# EQU P1.0
SC10# EQU P1.1
SC11# EQU P1.2
SC12# EQU P1.3
SC13# EQU P1.4
SC14# EQU P1.5
SC15# EQU P1.6
SC16# EQU P1.7
SC17# EQU P2.0
SC18# EQU P2.1
SC19# EQU P2.2
SC20# EQU P2.3
SC21# EQU P2.4
SC22# EQU P2.5
SC23# EQU P2.6
SC24# EQU P2.7
XS1A2 EQU P3.0 ;RXD,P3.0接74LS164 1A2端,用于顯示,不能改變
XSCLK EQU P3.1 ;TXD,P3.1接74LS164 CLK端,用于顯示,不能改變
AJQUY EQU P3.2 ;設置區域的按鍵,要同時按下區域鍵和上調或下調鍵方可調節
AJCSH EQU P3.3 ;設置參數的按鍵,要同時按下參數鍵和上調或下調鍵方可調節
AJSHT EQU P3.4 ;上調按鍵
AJXIT EQU P3.5 ;下調按鍵
SDA EQU P3.6 ;EEPROM數據傳送口,必須接上拉電阻,否則有時開機不正常
SCL EQU P3.7 ;EEPROM時鐘傳送口,必須接上拉電阻,否則有時開機不正常
KMWDT EQU 0E1H ;看門狗地址
ORG 0000H ;程序執行開始地址
LJMP KS ;跳至KS
ORG 0003H ;外中斷0中斷程序入口
RETI ;跳至INT_0中斷服務程序
ORG 000BH ;定時器T0中斷程序入口
LJMP INTT0 ;中斷返回
ORG 0013H ;外中斷1中斷入口
RETI ;中斷返回
ORG 001BH ;定時器T1中斷程序入口
RETI ;跳至INTT1中斷服務程序
ORG 0023H ;串口中斷入口地址
RETI
ORG 0200H
;------------------------------------
;開機初始化
;------------------------------------
KS: MOV KMWDT,#00111100B ;設置看門狗
MOV R0,#0FFH ;延時,待電源正常后系統才開始工作
DJNZ R0,$
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV SP,#70H
MOV TMOD,#01H ;設置T0為16位定時器,方式1
MOV TH0,#0D8H ;設定T0的定時初值,12M晶振,定時為10ms,
MOV TL0,#0F0H ;通斷總時間周期=10ms×100(因為分成100%)=1s
SETB ET0 ;允許T0中斷
SETB EA ;開中斷
MOV 6FH,#00H ;6FH為10mS時間到標志,現置零
;開始運行,調用存儲器保存的數據
;------------------------------------
LCALL READ_DATA ;將EEPROM中原里程數據調入內存
;------------------------------------
MOV 48H,#1 ;設定開機后顯示屏顯示1#區域的參數
LCALL LEDXS1 ;調用顯示程序
;------------------------------------
;把各區域內的參數值提取用于控制和顯示
MOV 50H,30H ;50H為1#輸出時間參數值緩存區
MOV 51H,31H ;51H為2#輸出時間參數值緩存區
MOV 52H,32H ;以下以此類推
MOV 53H,33H
MOV 54H,34H
MOV 55H,35H
MOV 56H,36H
MOV 57H,37H
MOV 58H,38H
MOV 59H,39H
MOV 5AH,3AH
MOV 5BH,3BH
MOV 5CH,3CH
MOV 5DH,3DH
MOV 5EH,3EH
MOV 5FH,3FH
MOV 60H,40H
MOV 61H,41H
MOV 62H,42H
MOV 63H,43H
MOV 64H,44H
MOV 65H,45H
MOV 66H,46H
MOV 67H,47H
;------------------------------------
;各輸出運行狀態標志置零
CLR 01H ;01H為1#輸出運行狀態標志(區分輸出是高電平還是低電平)
CLR 02H ;02H為2#輸出運行狀態標志(區分輸出是高電平還是低電平)
CLR 03H ;以下以此類推
CLR 04H
CLR 05H
CLR 06H
CLR 07H
CLR 08H
CLR 09H
CLR 0AH
CLR 0BH
CLR 0CH
CLR 0DH
CLR 0EH
CLR 0FH
CLR 10H
CLR 11H
CLR 12H
CLR 13H
CLR 14H
CLR 15H
CLR 16H
CLR 17H
CLR 18H
SETB TR0 ;啟動T0
;------------------------------------
;按鍵處理程序
;------------------------------------
L1: JB AJQUY,L5 ;設置區域值
MOV P0,#0FFH ;設置區域時關閉所有輸出口
MOV P1,#0FFH
MOV P2,#0FFH
JB AJSHT,L3 ;上調區域,此時同時顯示該區域的參數
MOV A,48H
CJNE A,#24,L2 ;檢查調節區域值是否到達24區
SJMP L0 ;到達24區的停止
L2: INC 48H ;調節區域值步進加1
SJMP L0
L3: JB AJXIT,L1 ;下調區域,此時同時顯示該區域的參數
MOV A,48H
CJNE A,#1,L4 ;檢查調節區域值是否到達1區
SJMP L0 ;到達1區的停止
L4: DEC 48H ;調節區域值步進減1
L0: MOV A,#2FH ;30H起開始放參數值,1區對應30H,2區對應31H,其他雷同
ADD A,48H ;48H放當前區域值
MOV R1,0E0H ;0E0H即為A的地址
MOV 49H,@R1 ;49H放當前區域的參數值
LCALL LEDXS1 ;調用顯示子程序
LCALL YS1 ;延時
SJMP L1 ;返回再執行
;_____________________________________
L5: JB AJCSH,L00 ;設置參數值
MOV P0,#0FFH ;設置區域時關閉所有輸出口
MOV P1,#0FFH
MOV P2,#0FFH
MOV A,#2FH ;30H起開始放參數值,因為以下要加1,所以從2FH開始
ADD A,48H
MOV R1,0E0H ;0E0H即為A的地址
MOV 49H,@R1
JB AJSHT,L7 ;上調參數
MOV A,49H
CJNE A,#100,L6 ;參數等于100%不能再調
SJMP L0
L6: INC 49H ;參數調節步進加1
SJMP L9
L7: JB AJXIT,L1 ;下調參數
MOV A,49H
CJNE A,#0,L8 ;參數等于0%不能再調
SJMP L0
L8: DEC 49H ;參數調節步進減1
L9: MOV @R1,49H
LCALL LEDXS1 ;調用顯示子程序
LCALL WRITE_DATA ;把參數值數據存入EEPROM,防止掉電數據丟失
LCALL YS1 ;延時
SJMP L1 ;返回再執行
;------------------------------------
;輸出
;------------------------------------
L00: MOV A,30H ;檢查1#參數是否為0%
JNZ L01 ;1#參數不為0%時繼續檢測
SETB SC01# ;1#參數為0%時關閉1#輸出
SJMP L10 ;關閉1#輸出后轉檢測2#端口
L01: CJNE A,#100,L02 ;檢查1#參數是否為100%
CLR SC01# ;1#參數為100%時1#有輸出
SJMP L10 ;接通1#輸出后轉檢測2#端口
L02: JB 01H,L03 ;判斷1#輸出是高電平還是低電平
CLR SC01# ;1#輸出是高電平的且不為0%或100#的按參數運行
DEC 50H ;參數減法,直到為0
MOV A,50H
JNZ L10 ;參數減到0,未到0的轉檢測2#端口
CLR C ;參數減到0,開始轉為關閉,清空C
MOV A,#100 ;關閉的時間參數=100-原設定的參數
SUBB A,30H ;原設定的參數放在30H
MOV 50H,A ;關閉的時間參數放在50H
SETB 01H ;置位,為1表示輸出狀態由高電平轉為低電平
L03: SETB SC01# ;按設定的時間參數高電平輸出完后轉為低電平輸出
DEC 50H ;參數減法,直到為0
MOV A,50H
JNZ L10 ;參數減到0,未到0的轉檢測2#端口
MOV 50H,30H ;低電平按設定的時間參數輸出完后返回轉為高電平輸出
CLR 01H ;清標志位,為0表示輸出狀態由低電平轉為高電平
L10: MOV A,31H ;以下以此類推
JNZ L11
SETB SC02#
SJMP L20
L11: CJNE A,#100,L12
CLR SC02#
SJMP L20
L12: JB 02H,L13
CLR SC02#
DEC 51H
MOV A,51H
JNZ L20
CLR C
MOV A,#100
SUBB A,31H
MOV 51H,A
SETB 02H
L13: SETB SC02#
DEC 51H
MOV A,51H
JNZ L20
MOV 51H,31H
CLR 02H
L20: MOV A,32H
JNZ L21
SETB SC03#
SJMP L30
L21: CJNE A,#100,L22
CLR SC03#
SJMP L30
L22: JB 03H,L23
CLR SC03#
DEC 52H
MOV A,52H
JNZ L30
CLR C
MOV A,#100
SUBB A,32H
MOV 52H,A
SETB 03H
L23: SETB SC03#
DEC 52H
MOV A,52H
JNZ L30
MOV 52H,32H
CLR 03H
L30: MOV A,33H
JNZ L31
SETB SC04#
SJMP L40
L31: CJNE A,#100,L32
CLR SC04#
SJMP L40
L32: JB 04H,L33
CLR SC04#
DEC 53H
MOV A,53H
JNZ L40
CLR C
MOV A,#100
SUBB A,33H
MOV 53H,A
SETB 04H
L33: SETB SC04#
DEC 53H
MOV A,53H
JNZ L40
MOV 53H,33H
CLR 04H
L40: MOV A,34H
JNZ L41
SETB SC05#
SJMP L50
L41: CJNE A,#100,L42
CLR SC05#
SJMP L50
L42: JB 05H,L43
CLR SC05#
DEC 54H
MOV A,54H
JNZ L50
CLR C
MOV A,#100
SUBB A,34H
MOV 54H,A
SETB 05H
L43: SETB SC05#
DEC 54H
MOV A,54H
JNZ L50
MOV 54H,34H
CLR 05H
L50: MOV A,35H
JNZ L51
SETB SC06#
SJMP L60
L51: CJNE A,#100,L52
CLR SC06#
SJMP L60
L52: JB 06H,L53
CLR SC06#
DEC 55H
MOV A,55H
JNZ L60
CLR C
MOV A,#100
SUBB A,35H
MOV 55H,A
SETB 06H
L53: SETB SC06#
DEC 55H
MOV A,55H
JNZ L60
MOV 55H,35H
CLR 06H
L60: MOV A,36H
JNZ L61
SETB SC07#
SJMP L70
L61: CJNE A,#100,L62
CLR SC07#
SJMP L70
L62: JB 07H,L63
CLR SC07#
DEC 56H
MOV A,56H
JNZ L70
CLR C
MOV A,#100
SUBB A,36H
MOV 56H,A
SETB 07H
L63: SETB SC07#
DEC 56H
MOV A,56H
JNZ L70
MOV 56H,36H
CLR 07H
L70: MOV A,37H
JNZ L71
SETB SC08#
SJMP L80
L71: CJNE A,#100,L72
CLR SC08#
SJMP L80
L72: JB 08H,L73
CLR SC08#
DEC 57H
MOV A,57H
JNZ L80
CLR C
MOV A,#100
SUBB A,37H
MOV 57H,A
SETB 08H
L73: SETB SC08#
DEC 57H
MOV A,57H
JNZ L80
MOV 57H,37H
CLR 08H
L80: MOV A,38H
JNZ L81
SETB SC09#
SJMP L90
L81: CJNE A,#100,L82
CLR SC09#
SJMP L90
L82: JB 09H,L83
CLR SC09#
DEC 58H
MOV A,58H
JNZ L90
CLR C
MOV A,#100
SUBB A,38H
MOV 58H,A
SETB 09H
L83: SETB SC09#
DEC 58H
MOV A,58H
JNZ L90
MOV 58H,38H
CLR 09H
L90: MOV A,39H
JNZ L91
SETB SC10#
SJMP LA0
L91: CJNE A,#100,L92
CLR SC10#
SJMP LA0
L92: JB 0AH,L93
CLR SC10#
DEC 59H
MOV A,59H
JNZ LA0
CLR C
MOV A,#100
SUBB A,39H
MOV 59H,A
SETB 0AH
L93: SETB SC10#
DEC 59H
MOV A,59H
JNZ LA0
MOV 59H,39H
CLR 0AH
LA0: MOV A,3AH
JNZ LA1
SETB SC11#
SJMP LB0
LA1: CJNE A,#100,LA2
CLR SC11#
SJMP LB0
LA2: JB 0BH,LA3
CLR SC11#
DEC 5AH
MOV A,5AH
JNZ LB0
CLR C
MOV A,#100
SUBB A,3AH
MOV 5AH,A
SETB 0BH
LA3: SETB SC11#
DEC 5AH
MOV A,5AH
JNZ LB0
MOV 5AH,3AH
CLR 0BH
LB0: MOV A,3BH
JNZ LB1
SETB SC12#
SJMP LC0
LB1: CJNE A,#100,LB2
CLR SC12#
SJMP LC0
LB2: JB 0CH,LB3
CLR SC12#
DEC 5BH
MOV A,5BH
JNZ LC0
CLR C
MOV A,#100
SUBB A,3BH
MOV 5BH,A
SETB 0CH
LB3: SETB SC12#
DEC 5BH
MOV A,5BH
JNZ LC0
MOV 5BH,3BH
CLR 0CH
LC0: MOV A,3CH
JNZ LC1
SETB SC13#
SJMP LD0
LC1: CJNE A,#100,LC2
CLR SC13#
SJMP LD0
LC2: JB 0DH,LC3
CLR SC13#
DEC 5CH
MOV A,5CH
JNZ LD0
CLR C
MOV A,#100
SUBB A,3CH
MOV 5CH,A
SETB 0DH
LC3: SETB SC13#
DEC 5CH
MOV A,5CH
JNZ LD0
MOV 5CH,3CH
CLR 0DH
LD0: MOV A,3DH
JNZ LD1
SETB SC14#
SJMP LE0
LD1: CJNE A,#100,LD2
CLR SC14#
SJMP LE0
LD2: JB 0EH,LD3
CLR SC14#
DEC 5DH
MOV A,5DH
JNZ LE0
CLR C
MOV A,#100
SUBB A,3DH
MOV 5DH,A
SETB 0EH
LD3: SETB SC14#
DEC 5DH
MOV A,5DH
JNZ LE0
MOV 5DH,3DH
CLR 0EH
LE0: MOV A,3EH
JNZ LE1
SETB SC15#
SJMP LF0
LE1: CJNE A,#100,LE2
CLR SC15#
SJMP LF0
LE2: JB 0FH,LE3
CLR SC15#
DEC 5EH
MOV A,5EH
JNZ LF0
CLR C
MOV A,#100
SUBB A,3EH
MOV 5EH,A
SETB 0FH
LE3: SETB SC15#
DEC 5EH
MOV A,5EH
JNZ LF0
MOV 5EH,3EH
CLR 0FH
LF0: MOV A,3FH
JNZ LF1
SETB SC16#
SJMP LFA
LF1: CJNE A,#100,LF2
CLR SC16#
SJMP LFA
LF2: JB 10H,LF3
CLR SC16#
DEC 5FH
MOV A,5FH
JNZ LFA
CLR C
MOV A,#100
SUBB A,3FH
MOV 5FH,A
SETB 10H
LF3: SETB SC16#
DEC 5FH
MOV A,5FH
JNZ LFA
MOV 5FH,3FH
CLR 10H
LFA: MOV A,40H
JNZ LF10
SETB SC17#
SJMP LFB
LF10: CJNE A,#100,LF11
CLR SC17#
SJMP LFB
LF11: JB 11H,LF12
CLR SC17#
DEC 60H
MOV A,60H
JNZ LFB
CLR C
MOV A,#100
SUBB A,40H
MOV 60H,A
SETB 11H
LF12: SETB SC17#
DEC 60H
MOV A,60H
JNZ LFB
MOV 60H,40H
CLR 11H
LFB: MOV A,41H
JNZ LF20
SETB SC18#
SJMP LFC
LF20: CJNE A,#100,LF21
CLR SC18#
SJMP LFC
LF21: JB 12H,LF22
CLR SC18#
DEC 61H
MOV A,61H
JNZ LFC
CLR C
MOV A,#100
SUBB A,41H
MOV 61H,A
SETB 12H
LF22: SETB SC18#
DEC 61H
MOV A,61H
JNZ LFC
MOV 61H,41H
CLR 12H
LFC: MOV A,42H
JNZ LF30
SETB SC19#
SJMP LFD
LF30: CJNE A,#100,LF31
CLR SC19#
SJMP LFD
LF31: JB 13H,LF32
CLR SC19#
DEC 62H
MOV A,62H
JNZ LFD
CLR C
MOV A,#100
SUBB A,42H
MOV 62H,A
SETB 13H
LF32: SETB SC19#
DEC 62H
MOV A,62H
JNZ LFD
MOV 62H,42H
CLR 13H
LFD: MOV A,43H
JNZ LF40
SETB SC20#
SJMP LFE
LF40: CJNE A,#100,LF41
CLR SC20#
SJMP LFE
LF41: JB 14H,LF42
CLR SC20#
DEC 63H
MOV A,63H
JNZ LFE
CLR C
MOV A,#100
SUBB A,43H
MOV 63H,A
SETB 14H
LF42: SETB SC20#
DEC 63H
MOV A,63H
JNZ LFE
MOV 63H,43H
CLR 14H
LFE: MOV A,44H
JNZ LF50
SETB SC21#
SJMP LFF
LF50: CJNE A,#100,LF51
CLR SC21#
SJMP LFF
LF51: JB 15H,LF52
CLR SC21#
DEC 64H
MOV A,64H
JNZ LFF
CLR C
MOV A,#100
SUBB A,44H
MOV 64H,A
SETB 15H
LF52: SETB SC21#
DEC 64H
MOV A,64H
JNZ LFF
MOV 64H,44H
CLR 15H
LFF: MOV A,45H
JNZ LF60
SETB SC22#
SJMP LFG
LF60: CJNE A,#100,LF61
CLR SC22#
SJMP LFG
LF61: JB 16H,LF62
CLR SC22#
DEC 65H
MOV A,65H
JNZ LFG
CLR C
MOV A,#100
SUBB A,45H
MOV 65H,A
SETB 16H
LF62: SETB SC22#
DEC 65H
MOV A,65H
JNZ LFG
MOV 65H,45H
CLR 16H
LFG: MOV A,46H
JNZ LF70
SETB SC23#
SJMP LFH
LF70: CJNE A,#100,LF71
CLR SC23#
SJMP LFH
LF71: JB 17H,LF72
CLR SC23#
DEC 66H
MOV A,66H
JNZ LFH
CLR C
MOV A,#100
SUBB A,46H
MOV 66H,A
SETB 17H
LF72: SETB SC23#
DEC 66H
MOV A,66H
JNZ LFH
MOV 66H,46H
CLR 17H
LFH: MOV A,47H
JNZ LF80
SETB SC24#
SJMP LFI
LF80: CJNE A,#100,LF81
CLR SC24#
SJMP LFI
LF81: JB 18H,LF82
CLR SC24#
DEC 67H
MOV A,67H
JNZ LFI
CLR C
MOV A,#100
SUBB A,47H
MOV 67H,A
SETB 18H
LF82: SETB SC24#
DEC 67H
MOV A,67H
JNZ LFI
MOV 67H,47H
CLR 18H
;------------------------------------
;等待10mS到
;------------------------------------
LFI: LCALL DISP ;調用顯示程序
L123: MOV A,6FH
MOV KMWDT,#00111100B;設置看門狗
CJNE A,#01H,L123
MOV 6FH,#00H
LJMP L1
;------------------------------------
z;顯示轉化程序,48H放區域值,49H放到參數值,轉換后6AH放區域值高位,
;6BH放區域值低位,6CH、6DH、6EH放參數值,
;------------------------------------
LEDXS1:MOV B,#10 ;顯示程序,為拆分計數值送顯示器作準備
MOV A,48H ;余數作個位
DIV AB ;將計數值除以10,高位進A,余數進B
MOV 6BH,B
JNZ LOOP1
MOV 6AH,#10
SJMP LOOP2
LOOP1:MOV 6AH,A
LOOP2:MOV A,#2FH
ADD A,48H
MOV R1,0E0H
MOV 49H,@R1
MOV B,#10 ;顯示程序,為拆分計數值送顯示器作準備
MOV A,49H ;余數作個位
DIV AB ;將計數值除以10,高位進A,余數進B
MOV 6EH,B
MOV B,#10
DIV AB
MOV 6DH,B
JNZ LOOP3
MOV 6CH,#10
SJMP LOOP4
LOOP3:MOV 6CH,A
LOOP4:LCALL DISP
RET
;------------------------------------
;顯示程序
;------------------------------------
DISP: SETB XS1A2 ;P3.0端口置1
SETB XSCLK ;P3.1端口置1
MOV SCON,#00H ;初始化串行口方式0
MOV R2,#05H ;顯示5位數
MOV R1,#6EH ;60H-65H為顯示緩沖區
MOV DPTR,#SETTAB ;字形表的入口地址
L00P: MOV A,@R1 ;取最高位的待顯示數據
MOVC A,@A+DPTR ;查表獲取字形碼
MOV SBUF,A ;送串口顯示
DELAY:JNB TI,DELAY ;等待發送完畢
CLR TI ;清發送標志
DEC R1 ;指針下移一位,準備取下一個待顯示數
DJNZ R2,L00P ;直到6個數據全顯示完。
CLR XS1A2 ;P3.0端口置0
CLR XSCLK ;P3.1端口置0
RET
SETTAB:DB 03H 9FH 25H 0DH 99H 49H 41H 1FH 01H 09H 0FFH
; 0 1 2 3 4 5 6 7 8 9 消隱碼
;------------------------------------
;10mS時間中斷
;------------------------------------
INTT0:PUSH ACC ;10mS時間中斷
PUSH PSW
MOV TH0,#0D8H ;重置時間參數為10mS(晶振為12M)
MOV TL0,#0F0H
MOV KMWDT,#00111100B;設置看門狗
MOV 6FH,#01H ;6FH為10mS時間到標志
POP PSW
POP ACC
RETI
YS1: MOV R6,#70H ;延時子程序
Y10: MOV R7,#0FFH
Y11: NOP
NOP
NOP
DJNZ R7,Y11
MOV KMWDT,#00111100B;設置看門狗
DJNZ R6,Y10
RET
;------------------------------------
;EEPROM操作程序
;------------------------------------
;-----------------------------------------------------
;寫N字節數據子程序
;-----------------------------------------------------
WRITE_DATA:
MOV R0,#00H ;數據寫入首地址
MOV R1,#30H ;
WR_LOOP: MOV B,@R1
LCALL WRITE_BYTE ;將查表結果寫入24C02
INC R0 ;地址+1
INC R1
MOV KMWDT,#00111100B;設置看門狗
CJNE R1,#48H,WR_LOOP;24個數寫入完畢?
RET
;-----------------------------------------------------
;讀N字節數據子程序
;從24C02讀出數據
;-----------------------------------------------------
READ_DATA:
MOV R0,#00H ;設定讀取的初始地址
MOV R1,#30H ;
RE_LOOP: LCALL READ_BYTE ;讀EEPROM
MOV KMWDT,#00111100B;設置看門狗
LCALL STOP
MOV @R1,A
INC R0 ;地址+1
INC R1
CJNE R1,#48H,RE_LOOP;24個數寫入完畢?
RET
;----------------------------------------------------
;寫操作子程序
;輸入參數: R0---要寫入的地址,B---要寫入的數據
;----------------------------------------------------
WRITE_BYTE:
LCALL START
MOV A,#0A0H
LCALL SENDBYTE
LCALL WAITACK
MOV KMWDT,#00111100B ;設置看門狗
MOV A,R0
LCALL SENDBYTE
LCALL WAITACK
MOV A,B
LCALL SENDBYTE
LCALL WAITACK
LCALL STOP
LCALL DELAY_5MS ;每寫入1個字節,延時若干MS
RET
;----------------------------------------------------
;讀操作子程序
;輸入參數:R0---要讀的字節地址,
;輸出參數: A---結果
;----------------------------------------------------
READ_BYTE:
LCALL START
MOV A,#0A0H
LCALL SENDBYTE
LCALL WAITACK
MOV A,R0
LCALL SENDBYTE
LCALL WAITACK
LCALL START
MOV A,#0A1H
LCALL SENDBYTE
LCALL WAITACK
LCALL RCVBYTE
RET
;-----------------------------------------------------
;從IIC總線上接收一個字節數據
;出口參數:A---接收數據存放在A中
;-----------------------------------------------------
RCVBYTE:
MOV R7,#08 ;一個字節共接收8位數據
CLR A
SETB SDA ;釋放SDA數據線
R_BYTE:
CLR SCL
NOP
NOP
NOP
NOP
SETB SCL ;啟動一個時鐘周期,讀總線
NOP
NOP
NOP
NOP
MOV C,SDA ;將SDA狀態讀入C
RLC A ;結果移入A
SETB SDA ;釋放SDA數據線
DJNZ R7,R_BYTE ;判斷8位數據是否接收完全?
RET
;----------------------------------------------------
;向IIC總線發送一個字節數據
;入口參數:A---待發送數據存放在A中
;----------------------------------------------------
SENDBYTE:
MOV R7,#08
S_BYTE:
RLC A
MOV SDA,C
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
DJNZ R7,S_BYTE ;8位發送完畢?
RET
;-----------------------------------------------------
;等待應答信號
;等待從機返回一個響應信號
;-----------------------------------------------------
WAITACK:
CLR SCL
SETB SDA ;釋放SDA信號線
NOP
NOP
SETB SCL
NOP
NOP
NOP
MOV C,SDA
JC WAITACK ;SDA為低電平,返回了響應信號
CLR SDA
CLR SCL
RET
;----------------------------------------------------
;啟動信號子程序
;----------------------------------------------------
START:
SETB SDA
SETB SCL
NOP
CLR SDA
NOP
NOP
NOP
NOP
CLR SCL
RET
;----------------------------------------------------
;停止信號子程序
;----------------------------------------------------
STOP: MOV KMWDT,#00111100B;設置看門狗
CLR SDA
NOP
SETB SCL
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
CLR SCL
CLR SDA
RET
;----------------------------------------------------
;延時5MS子程序
;輸入參數:5MS
;輸出參數: 無
;影響資源: R5,R6等
;----------------------------------------------------
DELAY_5MS:
MOV R6,#10
DE_LP:
MOV R5,#250
DJNZ R5,$
MOV KMWDT,#00111100B;設置看門狗
DJNZ R6,DE_LP
RET
;------------------------------------
;軟件陷阱
;------------------------------------
ORG 0B00H ;軟件陷阱
NOP
NOP
NOP
LJMP KS
END
復制代碼
作者:
ahshmj
時間:
2014-12-29 19:36
有些地方使用循環應該可以精簡代碼。
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
色污污
|
爱情岛论坛av
|
亚洲不卡
|
色六月婷婷
|
亚洲精品乱码久久久久久
|
午夜男人影院
|
日本熟妇毛耸耸xxxxxx
|
日韩影音
|
国产欧美视频在线观看
|
国产精品伦子伦免费视频
|
亚洲一区二区三区免费视频
|
九九视频免费观看
|
亚洲第一视频网站
|
亚洲精品一区二区三区在线观看
|
成年人网站在线免费观看
|
一区二区在线免费观看
|
免费毛片视频
|
欧美a在线
|
狠狠干天天干
|
91狠狠综合
|
深夜福利网站
|
亚洲小视频在线观看
|
国产精品一区二区在线播放
|
日本乱子伦
|
欧美性猛交99久久久久99按摩
|
黄色片视频在线观看
|
长河落日
|
高清乱码男女免费观看
|
欧美在线不卡
|
国产福利网
|
国产成人91
|
www.久久.com
|
国产精品麻豆免费版
|
亚洲一区二区免费
|
国产综合亚洲精品一区二
|
日韩一区二区三
|
天堂av网站
|
黄色三级av
|
色吧综合
|
日韩黄色一级
|
一区二区三区国产精品
|