導航:首頁 > 操作系統 > 單片機拆字

單片機拆字

發布時間:2022-04-28 07:54:19

『壹』 可編程作息時間控制器程序設計

主程序: 在程序開始時,首先初始化,設置中斷0源允許、總允許為一,兩個定時器的工作模式為一模式,整個程序由P2.6接低電平時啟動,啟動後,進入A段工作。在A短工作中調用顯示子程序,A段工作完時進入B段工作,每段工作時都要調用顯示子程序,,最後一段工作完時,關閉顯示,即對P2送入0FFH
顯示子程序:首先,對定時器賦初值,然後進行拆字,拆字採用除以十進行,除以十後,分別把商和余數送到顯緩單元,再查七段碼,把七段碼送到P1,送字位口到P2口,進行動態顯示,每次顯示一位時延時255個指令周期(即FFH個指令周期),四位顯示完後,再進行多次掃描,保證人眼看不到閃爍,最後判斷設定的工作時間到沒,到了幾跳出顯示子程序。
中斷程序:進入中斷後輸出報警信號,同時顯示器全部顯示0,,最後跳出中斷。
四:程序及其說明:
1.程序:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP BAOJING
ORG 0010H
;初始化程序
MAIN:SETB EA ;設置中斷
SETB EX0
CLR IT0
MOV TMOD,#11H ;設置定時器工作模式
SETB P3.4 ;驅動繼電器
SETB P3.5
SETB P3.6
SETB P3.7
HERE:JB P2.6,HERE ;判斷是否啟動
;進入工作階段
GONGZUO:MOV 41H,#0AH ;工作於A段
MOV R7,#0AH ;A段工作時間
CLR P3.4 ;驅動外部繼電器
LCALL SCAN ;調顯示程序
SETB P3.4 ;關斷外部驅動
MOV 41H,#0BH ;工作於B段
MOV R7,#14H ;B段工作時間
CLR P3.5 ;驅動外部繼電器
LCALL SCAN ;調顯示程序
SETB P3.5 ;關斷外部驅動
MOV 41H,#0CH ;工作於C段
MOV R7,#1EH ;C段工作時間
CLR P3.6 ;驅動外部繼電器
LCALL SCAN ;調顯示程序
SETB P3.6 ;關斷外部驅動
MOV 41H,#0DH ;工作於D段
MOV R7,#28H
CLR P3.7 ;驅動外部繼電器
LCALL SCAN ;調顯示程序
SETB P3.7 ;關斷外部驅動
MOV P2,#0FFH ;關顯示
LJMP HERE ;返回判斷處,確定是否繼續工作
;中斷報警程序
BAOJING: MOV P2.4,#00H ;指示燈亮
Mov P2.5,#00H
MOV TL0,#0E0H ;定時20ms
MOV TH0,#0B1H
SETB TR0 ;啟動定時
LP:MOV P1,#3FH ; 全部顯示為零
MOV P2,#00H
MOV P2.5,#00H ;揚聲器工作
JNB TF0,LP ;查詢定時時間到否
SETB P2.4 ;關指示燈
SETB P2.5 ;關揚聲器
RETI
;顯示子程序
ORG 0F00H
SCAN: MOV 42H,#0EH ;「—」(橫線)的七段碼
MOV R1,#32H ;延時常數
MOV TL1,#0E0H ;定時20ms的常數
MOV TH1,#0B1H
LP1: MOV A,R7 ;拆字程序(採用除法拆字)
MOV B,#10
DIV AB
MOV 43H,A ;送顯緩單元
MOV 44H,B
LP2: MOV R0,#41H ;設置顯緩的初始單元
MOV R4,#0FFH ;延時常數
MOV R5,#0FEH ;送字位口
LP3: MOV A,@R0
MOV P2,#0FFH ;關顯示
MOV DPTR,#TAB ;查七段碼、顯示
MOVC A,@A+DPTR
MOV P1,A
MOV P2,R5
LP4: DJNZ R4,LP4
INC R0 ;修改指針
MOV A,R5 ;改變顯示單元
RL A
MOV R5,A
JB ACC.4,LP3 ;判斷四位是否顯示完
SETB TR1 ;啟動定時器
JNB TF1,LP2 ;判斷定時時間是否到
DJNZ R1,LP2 ;延時一秒是否到
DJNZ R7,LP1 ;判斷設定時間是否到
RET
ORG 10FFH
;七段碼表單
TAB: DB 3FH ,06H,5BH, 4FH, 66H,6DH , 7DH
DB 07H, 7FH,6FH,77H, 7CH,39H, 5EH, 40H
2.說明:
主程序:設整個系統工作有四個階段,分為ABCD段,每段工作時間設為10S、20S、30S、40S,在程序的初始化階段設定定時器的工作模式、中斷允許,程序的運行由單片機的P2.6腳接低電平啟動,進入工作階段,在每個工作階段顯示工作段數和剩餘工作時間。
在A段工作時,把「A」這個字元送達41H顯緩單元,再設定A段的工作時間,送到R7寄存器中,設定對應的輸出腳的工作電平值,然後調顯示子程序,A段工作完畢,關閉對應的驅動輸出腳。
B、C、D段工作均和A段工作相似,只是驅動不同的輸出對象,最後一段工作完後,對P2口賦值高電平,關所有的顯示,最後跳回判斷處,判斷是否繼續工作。
顯示子程序:在顯示子程序中因為每段工作時,均要顯示「—」,所以在開始時把「—」的對應序號(在本程序的七段碼表中對應的序號為0EH)送到顯緩單元,對定時器T1定時20ms進行賦初值,計算初值的公式為:
T1初值=2^n-fosc/12×t
由於定時器工作在1模式,振盪頻率為12MHZ,所以計時器T1的初值為:E0B1(十六進制)
將設定的時間進行拆字,然後送到顯緩單元。拆字採用除法的方式進行,將定時時間送到寄存器A中,然後在B中送常數10,經過相除後在寄存器A中得到高位送到顯緩43H中,在寄存器B中得到低位送到顯緩44H單元中,顯緩單元指針首先指向顯緩首地址,通過變址定址方式查詢對應的七段碼送到P1口(字形口),對P2口送入字位口,每個顯示位顯示後經過延時255指令周期再進入下一步工作。每位顯示完後,修改顯示單元的指針,對指針單元的當前值自加一,然後對字位口進行左移,修改顯示單元,再進行判斷四位是否顯示完,即判斷字位口的第五位是否為1,若為1,則程序轉移,繼續顯示;若為0,則依次執行。四位顯示完後,啟動定時器1,定時20ms,查詢TF1的值,若TF1為0,則在此等待,若TF1為1,則R1自減1並判斷是否為0,若不為0,則轉移到顯示部分,若為0,則順序執行(即判斷1S到否);1S到則R7自減1並判斷R7是否為0,若不為0,轉移到拆字部分,若為0,則跳出調用(即判斷每段工作時間到設定時間沒有)。
中斷程序:若外部出現故障(外部故障用P3.2接低電平表示),P2.4、P2.5接低電平(即輸出報警信號,指示燈亮,揚聲器發出聲音),對定時器定T0時20ms賦初值,計算公式為:
T0初值=2^n-fosc/12×t
由於定時器工作在1模式,振盪頻率為12MHZ,所以計時器T1的初值為:E0B1(十六進制)
對P1口送入「0」的七段碼,P2口送入00,每個顯示單元全部顯示為0,啟動定時器,若定時時間沒有到,則轉到顯示處,繼續讓全部顯示0,,若時間到,則對P2.4、P2.5全部送入高電平,關閉報警提示,中斷返回。
七段碼表單:將要顯示的數碼或字母的七段碼按在日常生活中的默認順序定義在一個表單中,通過把表單的首地址付給DPTR,再把需要顯示的數字或字母的對應序號送到寄存器A中,通過變址定址的方式(即MOVC指令)即可查出對應的七段碼。 希望被採納啊!!好長時間菜找到

『貳』 51單片機數字電壓表P0口改到P1口程序怎麼改

delay(1);
EN=1;//拉高使能端,為製造有效的下降沿做准備。
delay(1);
EN=0;//en由高變低,產生下降沿,液晶執行命令
}
void write_1602dat(uchar dat)//液晶寫入數據函數
{
RS=1;//數據/指令選擇置為數據
P0=dat;//送入數據 *******************************這個我改成了P1
delay(1);
EN=1; //en置高電平,為製造下降沿做准備。
delay(1);
EN=0; //en由高變低,產生下降沿,液晶執行命。
}
void lcd1602_init()//液晶初始化函數
{
uchar a;
RW=0;
write_1602com(0x38);//設置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數據。
write_1602com(0x0c);//開顯示不顯示游標
write_1602com(0x06);//整屏不移動,游標自動右移。
write_1602com(0x01);//清顯示
write_1602com(0x80);//顯示固定符號從第一行第0個(從第0個開始數)位置開始顯示
for(a=0;a<4;a++)
{
write_1602dat(tab1[a]);//向液晶屏寫固定符號部分
}
write_1602com(0x80+9);//顯示固定符號寫入位置,從第一行第9個(從第0個開始數)位置開始顯示。
for(a=0;a<8;a++)
{
write_1602dat(tab2[a]);//寫顯示固定符號
}
}
/*************轉速顯示函數**********/
void display(unsigned long speed)//轉速顯示函數
{
if(speed<=99999)
{
uchar wan,qian,,shi,ge;//定義拆字變數
wan=speed/10000;//轉速/10000得到萬位
qian=speed%10000/1000;//轉速/10000的余數/1000得到千位

『叄』 單片機拆字程序 ;

就是把 2000H里的低4位放在高4位與2001H里的低4位拼成一個位元組放到 2002H里
如 (2000H) = 12H (2001H)= 34H
12H&0FH = 02H 02H <> 20H
34H&0FH= 04H 20H|04H=24H
2002H里就放入了 24H

『肆』 單片機80c51 ORG 0000H MOV 30H,#53H MOV A,30H SWAP A ANL A,#0FH MOV 31H,A MOV A,30H ANL A,#0FH MOV

指令SWAP A執行完畢後,累加器A的值為(35H ),30H單元的值為(53H ),31H單元的值為(未知 ),32H單元的值為(未知 )
並且請簡單描述上列程序的功能:是把立即數,#53H拆開成高四位和低四位,分別放入31H和32H單元中。這通常稱為拆字程序。
應該是問這個程序執行,
累加器A的值為(03H ),30H單元的值為(53H ),31H單元的值為(05H ),32H單元的值為(03H )

『伍』 求單片機課程設計實驗 用匯編語言,基於51單片機的定時鬧鍾

MODE_RG EQU40H ;模式選擇

MODE2 EQU 60H ;MODE值

MODE3 EQU61H

MODE4 EQU62H

MODE5 EQU63H

MODE6 EQU64H

MODE1 EQU65H

HOUR EQU41H ;小時緩沖區

MIN EQU42H ;分鍾緩沖區

SEC EQU 43H ;秒緩沖區

TEMP EQU4AH

;*********鬧鍾緩沖區********************

H_ALARM EQU 6AH ;鬧鍾緩沖區

M_ALARM EQU6BH

S_ALARM EQU6CH

F_ALARM EQU6DH

;***********秒錶緩沖區******************

M_SEC EQU76H

S_SEC EQU77H

;*********LED送顯示臨時變數*************

LED0 EQU51H

LED1 EQU52H

LED2EQU53H

LED3 EQU54H

MODE_KEYEQUP3.4

UP_KEY EQUP3.3

DOWN_KEY EQUP3.5

BUF EQU49H

ORG0000H

LJMPMAIN

ORG000BH

LJMPINT_0

ORG001BH

LJMPINT_1

ORG0080H

MAIN: MOVSP,#2FH ;堆棧初始化

MOVMODE_RG,#0 ;MODE_RG寄存器值初始化

MOVLED0,#0FEH ;初始化LED

MOVLED1,#0FDH

MOVLED2,#0FBH

MOVLED3,#0F7H

MOVMODE1,#1

MOVMODE2,#2

MOVMODE3,#3

MOVMODE4,#4

MOVMODE5,#5

MOVMODE6,#6

MOVF_ALARM,#0 ;錯誤2:一開始用CLRF_ALARM,這導致在後面的時候JZF_ALARM運行錯誤,

MOVBUF,#0 ;在於JZ指令是對累加器A全為0或者全為1進行判斷,CLR只能對一位操作

MOVTMOD,#11H ;定時器初始化:定時器0,方式1,定時器1,方式1

MOVIP,#00001000B ;定時器1優先順序高

MOVTH0,#3CH ;定時50MS

MOVTL0,#0B1H

MOVTH1,#0D8H ;定時10MS

MOVTL1,#0F0H

SETBEA

SETBET0

SETBET1

SETBTR0;啟動定時器

MOVHOUR,#0 ;fortest

MOVMIN,#0

MOVSEC,#0 ;定時器計數器,50MS中斷一次,200次則剛好1S

MOVM_SEC,#0

MOVS_SEC,#0

MOVH_ALARM,#0

MOVM_ALARM,#0

MAIN1: LCALLDISPLAY12

LCALLDISPLAY34

;CLRP1.4 TEST

JNBMODE_KEY,KEY_SCAN

MOVA,MODE_RG

CJNEA,MODE6,Y1 ;MODE6秒錶

JNBDOWN_KEY,DEALDOWN ;判斷秒錶開關

JNBUP_KEY,DEALUP

Y1: MOVA,F_ALARM ;判斷鬧鍾

JNZALARM

LJMPMAIN1

;-----------------------------------秒錶開關程序---------------------------

DEALDOWN: LCALLDELY10MS

JBDOWN_KEY,MAIN1

H1: JNBDOWN_KEY,H1

CPLTR1

LJMPMAIN1

DEALUP: LCALLDELY10MS

JBUP_KEY,MAIN1

H2: JNBUP_KEY,H2

MOVM_SEC,#0

MOVS_SEC,#0

CLRTR1

LJMPMAIN1

;-----------------------------------鬧鍾掃描程序---------------------------

ALARM: MOVA,H_ALARM

CPLP1.2

CJNEA,HOUR,EXIT3

MOVA,M_ALARM

CJNEA,MIN,EXIT3

LJMPSTARTALARM

EXIT3: SETBP3.6

LJMPMAIN1

STARTALARM:CPLP3.6

JNBDOWN_KEY,OFFALARM

LJMPS1

OFFALARM: LCALLDELY10MS

JBDOWN_KEY,MAIN1

S2: JNBDOWN_KEY,S2

MOVF_ALARM,#0

SETBP3.6

LJMPMAIN1

S1: LCALLDELAY

LJMPMAIN1

;-----------------------------------鍵盤掃描程序---------------------------

KEY_SCAN: LCALLDELY10MS

JBMODE_KEY,MAIN1

INCMODE_RG

;SETBP1.4 測試

K1: JNBMODE_KEY,K1 ;按鍵直到用戶松開按鍵

K2: MOVA,MODE_RG

CJNEA,#0,DEALMODE;不是在正常顯示模式下則跳轉到模式處理程序

LJMPMAIN1 ;返回主程序

;*******************模式處理程序部分

DEALMODE: MOVTEMP,#0 ;凡轉入MODE處理,則首先清除TEMP

MOVA,MODE_RG ;有MODE_RG值不為5、0

CJNEA,MODE2,M0 ;判斷MODE_RG值,不為1跳轉

LJMPH_GLINT ;模式1,小時位閃爍

M0: CJNEA,MODE3,M1 ;不是模式2,跳轉

LJMPM_GLINT ;模式2,分鍾位閃爍

M1: CJNEA,MODE4,M2 ;不是模式3,跳轉

LJMPH_GLINT

M2: CJNEA,MODE5,M3

LJMPM_GLINT

M3: CJNEA,MODE6,M4

MOVM_SEC,#0

MOVS_SEC,#0

LJMPMAIN1

M4: CJNEA,MODE1,M5

;CLRTR1

LJMPMAIN1

M5: MOVMODE_RG,#0

LJMPMAIN1

;*****************************MODE為1,3,小時位閃爍

//MOVTEMP,HOUR ;將TEMP賦值,防止在加的時候是在隨機值的基礎上增加

H_GLINT: ;CPLP1.0

MOVR0,#28

MOVR1,#28

K4: LCALLDISPLAY12 ;分開顯示

LCALLDISPLAY34

E1: JNBMODE_KEY,K21 ;檢測是否有按鍵按下,有按下則跳轉到分鍾位閃爍

JBUP_KEY,E9 ;判斷加位有無按鍵按下

LJMPUP

E9: DJNZR0,K4

K6: LCALLDISPLAY34

JNBMODE_KEY,K21 ;檢測是否有按鍵按下,有按下則跳轉延時後進行模式判斷

LJMPG1

K21: LCALLDELY10MS ;延時後確定有MODE按鍵按下,將

JBMODE_KEY,H_GLINT

W: JNBMODE_KEY,W

INCMODE_RG

CPLP1.4

LJMPDEALMODE ;確定有按下,MODE+1後返回MODE處理程序

JNBUP_KEY,UP ;判斷加位有無按鍵按下

G1: DJNZR1,K6

LJMPH_GLINT ;調用完畢返回,實現閃爍

K3: LJMPMAIN1 ;可省略

;******************************MODE為2,4,分鍾位閃爍

M_GLINT: MOVR0,#28

MOVR1,#28

K23: CPLP1.7

LCALLDISPLAY12

LCALLDISPLAY34

JNBMODE_KEY,KK ;跳轉,確定是否有按鍵按下

JNBUP_KEY,UP ;判斷加位有無按鍵按下

MOVA,MODE_RG

CJNEA,MODE3,E2 ;在MODE5的情況下要判斷鬧鍾確認鍵有沒按下

LJMPE5

E2: JNBDOWN_KEY,F2

LJMPE5

F2: LJMPONALARM2

E5: DJNZR0,K23

K24: LCALLDISPLAY12

JNBMODE_KEY,KK ;檢測是否有按鍵按下,有按下則跳轉

JNBUP_KEY,UP ;判斷加位有無按鍵按下

MOVA,MODE_RG ;掃描鬧鍾確認鍵

CJNEA,MODE3,E7 ;在MODE5的情況下要判斷鬧鍾確認鍵有沒按下

LJMPG2

E7: JBDOWN_KEY,E8

CPLP1.3

LJMPONALARM2

E8: LJMPG2

KK: LCALLDELY10MS ;去抖

JBMODE_KEY,M_GLINT

W1: JNBMODE_KEY,W1

INCMODE_RG

CPLP1.4

LJMPDEALMODE ;確定有按下,MODE+1後返回MODE處理程序

G2: DJNZR1,K24

LJMPM_GLINT

;*************************位加,處理程序

;***************小時調整

UP: MOVR1,#20

UP11: INCTEMP

UP12: MOVA,MODE_RG ;判斷此時的MODE,根據MODE將臨時變數給對應的賦值

CJNEA,MODE2,AA0 ;不是在MODE2的情況下跳轉

MOVA,TEMP

CJNEA,#24,A_UP1

MOVTEMP,#0

A_UP1: MOVHOUR,TEMP ;為MODE2,將臨時變數賦給小時位

LJMPUP15

AA0: CJNEA,MODE4,UP13//UP13為分鍾調整入口

MOVA,TEMP

CJNEA,#24,A_UP

MOVTEMP,#0

A_UP: MOVH_ALARM,TEMP ;模式3,將臨時變數賦給鬧鍾的小時位

LJMPUP15 ;UP15為顯示入口

;****************分鍾調整入口

UP13: MOVA,MODE_RG

CJNEA,MODE3,UP14 ;不是模式2,跳轉

MOVA,TEMP

CJNEA,#60,DISOVER2

MOVTEMP,#0

DISOVER2: MOVMIN,TEMP

LJMPUP15

UP14: MOVA,TEMP ;上面判斷不是模式2,則必然是模式4

CJNEA,#60,DISOVER3

MOVTEMP,#0

DISOVER3: MOVM_ALARM,TEMP

LJMPUP15

UP15: LCALLDISPLAY12

LCALLDISPLAY34

DJNZR1,UP01

MOVR1,#1 ;

JNBUP_KEY,UP11

UP01: JNBUP_KEY,UP12

UP16: MOVA,MODE_RG ;松開鍵以後按照模式判斷該返回哪種狀態,不能返回DEALMODE函數

CJNEA,MODE2,UP17

LJMPH_GLINT

UP17: CJNEA,MODE3,UP18

MOVSEC,#0 ;每次設置完時間後將秒鍾位置零保證時間准確

LJMPM_GLINT

UP18: CJNEA,MODE4,UP19

LJMPH_GLINT

UP19: CJNEA,MODE5,UP20

LJMPM_GLINT

UP20: LJMPMAIN1

ONALARM2: LCALLDELY10MS ;延時10MS,去抖

JBDOWN_KEY,B2 ;抖動所致,返回分鍾位閃爍

LJMPK42

B2: LJMPM_GLINT

K42: JNBDOWN_KEY,K42

MOVF_ALARM,#0FFH

MOVMODE_RG,#0

LJMPMAIN1

;---------------------------------------中斷程序入口---------------------

;*******************時間中斷0*********************

;錯誤1:中斷程序EXIT處用了MAIN1,導致一直處於中斷狀態

INT_0: PUSHACC

PUSHPSW

MOVTH0,#3CH

MOVTL0,#0B1H

INCBUF

MOVA,BUF

CJNEA,#20,EXIT

TIME: MOVBUF,#0

INCSEC

MOVA,SEC

CJNEA,#60,EXIT

MOVSEC,#00H

INCMIN

MOVA,MIN

CJNEA,#60,EXIT

MOVMIN,#00H

INCHOUR

MOVA,HOUR

CJNEA,#24,EXIT

MOVHOUR,#0

RETI

EXIT: POPPSW

POPACC

RETI

;******************時間中斷1***********************

INT_1: MOVTH1,#0D8H ;定時10MS

MOVTL1,#0F0H

INCS_SEC

MOVA,S_SEC

CJNEA,#100,EXIT4

MOVS_SEC,#0

INCM_SEC

MOVA,M_SEC

CJNEA,#100,EXIT4

MOVM_SEC,#0

EXIT4: RETI

;---------------------------------------顯示-----------------------------

DISPLAY12: MOVA,MODE_RG ;判斷模式,決定是顯示鬧鍾時間還是顯示當前時間

CJNEA,MODE4,DIS0 ;模式四,顯示鬧鍾

LJMPDIS01 ;MODE4

DIS0: CJNEA,MODE5,DIS20

DIS01: MOVR7,H_ALARM ;鬧鍾模式

LJMPDIS2

DIS20: CJNEA,MODE6,DIS21

MOVR7,M_SEC ;秒錶模式,顯示秒錶高位

LJMPDIS2

DIS21: CJNEA,MODE1,DIS1

LJMPDIS22

DIS22: MOVR7,MIN

LJMPDIS2

DIS1: MOVR7,HOUR ;DISPLAY12顯示高位

DIS2: LCALLBCTD ;判斷完畢,調用顯示

;將秒、分分別轉碼,放到R4,R3

MOVA,R4

MOVR3,A

LCALLDIVIDE

MOVDPTR,#NUMTAB

MOVP2,#0FH

MOVP2,LED0

MOVA,45H ;從拆字的出口獲取值

MOVCA,@A+DPTR

MOVP0,A

LCALLDELY10MS

MOVP2,LED1

MOVA,46H

MOVCA,@A+DPTR

MOVP0,A

LCALLDELY10MS

RET

DISPLAY34: MOVA,MODE_RG ;判斷模式,決定是顯示鬧鍾時間還是顯示當前時間

CJNEA,MODE4,DIS31

LJMPDIS32

DIS31: CJNEA,MODE5,DIS35

DIS32: MOVR7,M_ALARM

LJMPDIS34

DIS35: CJNEA,MODE6,DIS41

MOVR7,S_SEC ;秒錶模式,顯示秒錶低位

LJMPDIS34

DIS41: CJNEA,MODE1,DIS33

MOVR7,SEC

LJMPDIS34

DIS33: MOVR7,MIN ;DISPLAY34顯示低位

DIS34: LCALLBCTD

MOVA,R4

MOVR3,A

LCALLDIVIDE

MOVP2,LED2

MOVA,47H

MOVCA,@A+DPTR

MOVP0,A

LCALLDELY10MS

MOVP2,LED3

MOVA,48H

MOVCA,@A+DPTR

MOVP0,A

LCALLDELY10MS

SETBP2.3

RET

;--------------------二翻十:入口:R6R7出口:R2R3R4----------------------

BCTD: MOVR5,#16

CLRA

MOVR2,A

MOVR3,A

MOVR4,A

LOOP: CLRC

MOVA,R7

RLCA

MOVR7,A

MOVA,R6

RLCA

MOVR6,A

MOVA,R4

ADDCA,R4

DAA

MOVR4,A

MOVA,R3

ADDCA,R3

DAA

MOVR3,A

MOVA,R2

ADDCA,R2

DAA

MOVR2,A

DJNZR5,LOOP

RET

;-----------------------拆字:入口:R3R4出口:45H46H47H48H------------------

DIVIDE: MOVA,R3

ANLA,#0FH

MOV46H,A

MOVA,R3

ANLA,#0F0H

SWAPA

MOV45H,A;時拆字45H放時高位,46H放十低位

MOVA,R4

ANLA,#0FH

MOV48H,A

MOVA,R4

ANLA,#0F0H

SWAPA

MOV47H,A;分拆字47H放分高位,48H放分低位

RET

;------------------------------------延時----------------------------------

DELY10MS:MOVR6,#10

D1:MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

DELAY: MOV74H,#2;延時子程序,12M晶振延時1.002秒

L3: MOV72H,#10

L1: MOV73H,#249

L2: DJNZ73H,L2

LCALLDISPLAY12

LCALLDISPLAY34

JNBDOWN_KEY,OFFALARM1

LJMPS3

OFFALARM1: LCALLDELY10MS

JBDOWN_KEY,S3

S4: JNBDOWN_KEY,S4

MOVF_ALARM,#0

SETBP3.6

LJMPMAIN1

S3: DJNZ72H,L1

DJNZ74H,L3

RET

NUMTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH;碼表

END

『陸』 單片機拆字拼字實驗,要交作業了,急急急

MOV 31H, 30H
ANL 31H, #0FH
MOV A, 30H
SWAP A
ANL A, #0FH
MOV 32H, A

END

『柒』 請問單片機C語言定時器程序怎麼寫

你看過匯編嗎?與匯編的格式是一樣的。具體就是先開中斷允許標志位(IE裡面對應的各個位)在設定TMOD工作方式。下一步就是設定初始值了(TH、TL)。設置完這些就可以開定時器了。寫中斷中段函數是是需要另加interrupt 加上一個常數(比如是定時器0就在後面加上1)。我用89S52晶元編過一個定時器程序你參考一下,希望對你有一點幫助。
//功能:感應外界溫度並用數碼管顯示
//時間:2005年6月20日
//設計人:
#include<reg52.h>
#define uchar unsigned char
sbit ad0809_oe=P1^0; //定義各個位
sbit ad0809_start=P1^1;
sbit ad0809_ale=P1^2;
sbit ls595_rclk=P1^3;
sbit ad0809_eoc=P1^5;
sbit ls595_oe=P1^4;
sbit ls595_ser=P3^0;
sbit ls595_srclr=P3^1;
uchar nn,mm;
uchar code tab[]={0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x84};
send(uchar); //聲明函數
AD(uchar);
void display(uchar);
void init();
//********普通口輸入數據*****************
send(uchar shu) //普通口串列輸入
{
unsigned char i,k;
k=0x01;
for(i=0;i<8;i++)
{
if(k==(k&shu)) //判斷每位上是否為1
ls595_ser=1;
else
ls595_ser=0;
k<<=1; //左移一位
ls595_srclr=0; //輸入一個上升沿講數送入595中
ls595_srclr=1;
}
}
//*****************595顯示子程序********************
void display(uchar )
{
uchar ge,shi,flge; //ge拆字後個位的存放處shi拆字後十位的存放處flge ℃的存放處
shi=tab[/10]; //拆字
send(shi); //給595送數
ge=tab[%10];
send(ge);
flge=0xb1;
send(flge);
ls595_rclk=0; //上升沿送出數據
ls595_rclk=1;
}
//*******************初始化程序********************
void init() //初始化AD、定時器
{
ad0809_start=0; //Start管教上升沿將AD內部寄存器清零
ad0809_start=1;
ad0809_ale=1; //ALE高電平選擇通道
nn=0;
mm=0;
TMOD=0x01; //定時器初始化
//IE=0x82;
EA=1;
ET0=1;
TCON=0x00;
TL0=(65536-50000)%256; //定時50ms
TH0=(65536-50000)/256;

}
AD(uchar wen)
{
// unsigned char tt=0;
// ad0809_ale=1; //選擇通道
ad0809_start=1;
ad0809_start=0; //start下降沿啟動轉換信號
while(ad0809_eoc==0); //判斷轉換是否結束
ad0809_oe=1; //轉換結束送出轉換數據
wen=P2;
return (wen);
}

//**************中斷服務程序*********************
void tiam0() interrupt 1 using 1 //中斷服務程序
{
TL0=(65536-50000)%256; //定時50ms
TH0=(65536-50000)/256;
nn++;
if(nn==10) //0.5秒M加一
{
mm++;
nn=0;
}
}

//****************主程序***************************
void main()
{
unsigned char bb,aa,cc; //bb=計算後得到溫度,aa=AD輸出數據
unsigned char wen; //wen存放轉換的得到的數據
init();
// wen=17;
ls595_oe=0;
cc=0;
TR0=1;
while(1)
{
aa=AD(wen);
// ad0809_oe=0;
aa=~aa;
bb=aa/4;
if(mm==2)
{
mm=0;
cc=bb;
}
display(cc); //調用顯示子程序

}
}

『捌』 單片機拆字法原理介紹 拜託了

怎麼拆?

是高、低四位,分離?

『玖』 單片機實驗箱的實驗項目

(一)軟體實驗
(1)清零程序;
(2)拆字程序;
(3)拼字程序;
(4)數據區傳送子程序;
(5)數據排序實驗;
(6)查找相同數據個數;
(7)無符號雙位元組快速乘法子程序;
(8)多分支程序;
(9)脈沖計數實驗;
(10)電腦時鍾實驗。
(二)硬體實驗
(1)P1口亮燈實驗;
(2)P1口轉彎燈實驗;
(3)P3.3口輸入,P1口輸出實驗;
(4)工業順序控制實驗;
(5)8255 A、B、C口輸出方波實驗;
(6)8255 PA口控制PB口;
(7)8255控制交通燈;
(8)簡單I/O擴展實驗;
(9)A/D0809轉換實驗;
(10)D/A0832轉換實驗;
(11)8279鍵盤顯示實驗;
(12)通用列印機實驗;(列印機選配)
(13)微型列印機列印字元、曲線、漢字實驗;(列印機選配)
(14)I2C儲存卡讀寫實驗;
(15)繼電器控制實驗;
(16)步進電機控制;
(17)8253方波實驗;
(18)小直流電機調速實驗;
(19)16*16 LED點陣顯示實驗;
(20)128*64 LCD液晶顯示實驗;
(21)8250可編程非同步通訊介面實驗(自發自收);
(22)8251可編程通訊介面實驗(與PC機);
(23)單片機RS232/485串列發送實驗(雙機通訊);
(24)單片機RS232/485串列接收實驗(雙機通訊);
(25)溫度實驗;
(26)壓力實驗;
(27)DS18B20單匯流排數字溫度感測器實驗;
(28)紅外線遙控通信實驗;
(29)PWM脈沖寬度調制實驗;
(30)射極跟隨器實驗;
(31)電子音樂演奏實驗。
(三)擴展卡實驗(選配)☆
1、KZ-1擴展卡完成以下實驗:
(32)MAX813看門狗實驗
(33)74LS165並轉串實驗
(34)74LS164串轉並實驗
(35)查詢式鍵盤實驗
(36)74LS138解碼實驗
2、KZ-2擴展卡完成以下實驗:
(37)LM331 V/F轉換實驗
(38)LM331 F/V轉換實驗
(39)光耦隔離模塊實驗
3、KZ -3擴展卡完成以下實驗:
(40)串列EEPROM 93C46讀寫實驗
(41)I2C AT24C02讀寫實驗
(42)TLC549串列A/D轉換實驗
(43)TLC5615 10位D/A串列轉換實驗
(44)PCF8563 I2C日歷時鍾實驗
4、KZ -4擴展卡完成以下實驗:
(45)ISD1730語音錄放實驗
5、CAN匯流排擴展卡:
(46)CAN匯流排通訊介面實驗
6、TCP/IP乙太網擴展卡
(47)乙太網TCP/IP協議介面實驗
7、USB2.0卡
(48)USB2.0通訊介面實驗。
8、1032擴展卡:
Lattice公司:Lattice1032E晶元實驗開發。
9、1K30擴展卡:
Atera公司:EP1K30TC144晶元實驗開發。
10、C8051F020擴展卡+DICE-EC5模擬器:
C8051F020是完全集成的混合信號系統級MCU晶元。下面列舉了一些主要晶元資源:
(1)高速流水線結構的8051兼容的CIP-51內核(最大25MIPS);
(2)全速非侵入式的系統調試介面(片內);
(3)真正12位100ksps的8通道ADC,帶PGA和模擬多路開關;8位500ksps的8通道ADC;
(4)兩個12位DAC,可編程更新時序;
(5)64K位元組可在系統編程的FLASH存儲器;
(6)4352(4096+256)位元組的片內RAM;
(7)可定址64K位元組地址空間的外部數據存儲器介面;
(8)硬體實現的SPI,SMBus/IIC和兩個UART串列介面;
(9)5個通用的16位定時器;
(10)具有5個捕捉/比較模塊的可編程計數器/定時器陣列;
(11)片內看門狗定時器,2個比較器,VDD監視器和溫度感測器;
(12)64個I/O埠;
(13)-40~85度工業級溫度范圍;
(14)2.7V~3.6V工作電壓,100腳TQFP封裝;
11、DICE-DAQ數控式創新實驗平台擴展卡(實驗對象通過軟體模擬)
閉環控制
(1)機器人掃地雷實驗;
(2)刀庫捷徑選擇實驗;
(3)四層電梯實驗;
(4)四級傳送帶實驗;
(5)郵件分揀實驗;
(6)水塔水位控制實驗;
(7)交流電機Y/△起動實驗;
開環控制:
(8)交通信號燈實驗;
(9)步進電機實驗;
(10)舞台燈實驗;
(11)LED顯示實驗;
(12)液體混合裝置實驗;
(13)八通道邏輯分析實驗;
(14)溫度壓力實驗;
(15)連線自檢實驗;。

『拾』 單片機基礎實驗3個,用WAVE軟體,滿分懸賞,在線急等

只做一題,其他請學做。

ORG 0000H
CLR A
MOV R0,#30H ;內部RAM首地址
MOV B, #0FFH ; 需要清零的長度
L: MOVX @R0,A
INC R0
DJNZ B,L

閱讀全文

與單片機拆字相關的資料

熱點內容
linuxmap文件 瀏覽:67
轉轉app如何搜索快手主播 瀏覽:776
移動硬碟文件夾成0位元組 瀏覽:683
夢幻西遊解壓視頻大全 瀏覽:252
解壓小視頻手速 瀏覽:152
我的世界伺服器卡沒血如何修改 瀏覽:161
vba入門到精通pdf 瀏覽:113
tomcat怎麼一個伺服器部署 瀏覽:795
phphttps介面 瀏覽:895
javabyte數組int 瀏覽:808
公司網路共享的文件夾 瀏覽:1000
拍臉搭配衣服是什麼app 瀏覽:916
歐珀手機怎麼更改加密密碼 瀏覽:508
程序員那麼可愛陸漓氣人語錄 瀏覽:904
python中del刪除 瀏覽:457
華為雲耀伺服器和ecs區別 瀏覽:730
ruby語法編譯語言 瀏覽:569
U盤加密以後文件破損 瀏覽:287
改變路由器加密類型 瀏覽:306
java換行空格 瀏覽:834