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

單片機comp

發布時間:2022-11-19 04:04:36

單片機程序注釋(大致注釋)

ORG 00H
MOV R5,#00H
MOV R7,#00H
DJNZ R7,$
MOV R7,#10H
MOV R6,#06H
MOV R1,#35H
L1: MOV A,R7
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV @R1,A
DEC R1
INC R7
DJNZ R6,L1
START: ORL P2,#0FFH
MOV R4,#06H
MOV R0,#40H
CLEAR: MOV @R0,#00H
INC R0
DJNZ R4,CLEAR
L2: MOV R3,#0F7H
MOV R1,#00H
L3: MOV A,R3
MOV P1,A
MOV A,P1
MOV R4,A
SETB C
MOV R5,#04H
L4: RLC A
JNC KEYIN
INC R1
DJNZ R5,L4
CALL DISP
MOV A,R3
SETB C
RRC A
MOV R3,A
JC L3
JMP L2
KEYIN: MOV A,R1
XRL A,#0BH
JZ X3
MOV A,R1
XRL A,#0FH
JZ X4
MOV R7,#10
D1: MOV R6,#24
DJNZ R6,$
DJNZ R7,D1
D2: MOV A,P1
XRL A,R4
JZ D2
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV R7,A
XRL A,#0AH
JZ SET0
MOV A,R7
XRL A,#0BH
JZ START
MOV A,R7
XRL A,#0CH
JZ L2
MOV A,R7
XRL A,#0DH
JZ L2
MOV A,R7
XCH A,40H
XCH A,41H
XCH A,42H
XCH A,43H
XCH A,44H
XCH A,45H
CALL DISP
JMP L2
X3: JMP DISP2
X4: JMP COMP
DISP:MOV R0,#45H
DISP1: MOV A,@R0
ADD A,#50H
MOV P0,A
CALL DELAY
DEC R0
MOV A,@R0
ADD A,#40H
MOV P0,A
CALL DELAY
DEC R0
MOV A,@R0
ADD A,#30H
MOV P0,A
CALL DELAY
DEC R0
MOV A,@R0
ADD A,#20H
MOV P0,A
CALL DELAY
DEC R0
MOV A,@R0
ADD A,#10H
MOV P0,A
CALL DELAY
DEC R0
MOV A,@R0
ADD A,#00H
MOV P0,A
CALL DELAY
RET
SET0: MOV R2,#06H
MOV R0,#40H
MOV R1,#30H
E1: MOV A,@R0
XCH A,@R1
INC R0
INC R1
DJNZ R2,E1
CALL DELAY
E2: JMP START
COMP: MOV R1,#45H
MOV R0,#35H
MOV R2,#06H
C1: MOV A,@R1
XRL A,@R0
JNZ C3
DEC R1
DEC R0
DJNZ R2,C1
CLR P2.0
MOV R2,#200
C2: MOV R6,#248
DJNZ R6,$
DJNZ R2,C2
C3: INC R5
MOV A,R5
MOV R5,A
CJNE R5 ,#03H,C4
CLR P2.1
MOV R5,#00H
C4: JMP START
DISP2: MOV R0,#35H
CALL DISP
MOV A,P1
XRL A,R4
JZ DISP2
CALL DELAY
JMP START
DELAY: MOV R7,#C3
D3: MOV R6,#248
DJNZ R7,D3
RET
ORG 300H
TABLE: DB 01H 02H 03H 0CH
DB 04H 05H 06H 0DH
DB 07H 08H 09H 0EH
DB 0AH 00H 0BH 0FH
DB 01H 02H 03H 04H05H 06H
END

㈡ IAR單片機編程軟體,在給AVR單片機編程時,#pragma vector=TIMER0_COMP_vect,這個vector的值怎麼確定的

所有的中斷向量都在 晶元的頭文件中聲明或定義,如果你用的是MEGA16,那麼到MEGA16.H中找,而不是在IO.H中找。

㈢ 單片機實驗Comp_B模塊實驗中為什麼要關閉p6.6的輸入緩沖

電容裡面的殘留電量,LED會逐漸滅掉的
前提是你把開發板的電源徹底斷開還有和電腦的介面也要斷開,LED燈還會亮
如果沒有徹底斷開電源,和電腦的線依然連接的話,有以下可能:
1- 電腦端的介面隔離做得不好,有漏電過來,點亮LED
2- 電源的迴路沒有被物理切斷,有可能是控制器件出現漏電造成

㈣ 單片機控制繼電器定時開關的程序流程

板設計的定時開關控制器具有簡單易制、價格低廉、控制點數多、控制時間可精確到秒等特點:
1.主板電路部分
本電路主要是利用單片機AT89C2051(-24PI)作為主控制元件,通過外圍電路控制用電設備的電源,以達到定時開、關機的目的。AT89C2051具有體積小、功能強大、運行速度快、價格低廉等優點,非常適合製作集成度較高的控制電路。圖1為主電路原理圖,圖2為按其製作的主板(雙面)大小隻有95mm×70mm的器件位置圖。主板電路包括MCUAT89C2051、鍵盤與顯示、輸入與輸出口、復位和電源濾波等電路組成。
(1)鍵盤與顯示顯示電路由U2、U3、Q1~Q7和L1A、L2A組成。U2為BCD-7段解碼器(74LS47),通過單片機U1的P1.4~P1.7口將要顯示字元的BCD碼輸出到U2的四個輸入端,經U2解碼後輸出相應的筆段驅動LED數碼管(共陽)。LED數碼管顯示採用動態掃描方式,即在某一時刻,只有一個數碼管被點亮。數碼管的位選信號由單片機U1的P3.3~P3.5輸出,經U3(74HC138)解碼後通過Q1~Q6放大,驅動相應的數碼管。R17~R24為限流電阻。
由於U2隻能輸出7段筆段碼,而數碼管除了七段筆段外,還要控制點亮小數點,因此,小數點必須有另外的驅動電路來完成,在這里,通過Q7來驅動小數點。當需要點亮小數點時,在U1的P1.3輸出高電平即可。
鍵盤電路跟顯示電路一樣,採用掃描方式,利用動態顯示時的數碼管驅動位置信號來判斷相應按鍵的狀態。U1的P3.3~P3.5口輸出的BCD碼經U3解碼後,相應Y口呈低電平,而U1的P3.7口平時為高電平(由於R8上拉),當某一鍵按下時,P3.7被下拉為低電平,這時MCU利用程序查詢P3.7是否為低電平,如果P3.7為低電平,就讀回U1P3.3~P3.5口的值(從緩沖區讀取),則可判斷是哪個按鍵按下,然後調用相應的處理程序進行處理。
(2)控制輸出、復位與電源濾波電路MCU對控制的輸出是通過P3.0~P3.2口完成的。程序開始時這三個口的輸出狀態是低電平,MCU通過程序查詢三路輸出的ON或OFF狀態預置時間是否已到,如果已到時間,則改變相應的輸出狀態,就完成了對外部電路的控制。復位電路如圖1左上角所示,C3和R25完成上電復位,S6為手動復位,按鍵輸入干擾和抖動的預防是由軟體完成的。+5V電源由JP2輸入,經C4~C9濾波後給U1和其它器件供電。
2.電源與控制電路
電源及控制電路。其中,市電經總開關K後由B降壓、V1整流、C11~C14濾波、U4、U5穩壓後給主板和控制電路板提供穩定的工作電源;主板送過來的三路控制信號通過Q12~Q14分別控制繼電器J1、J2、J3,對外部電路實施直接控制。繼電器這里沒有給出具體型號,您可根據耐壓及通流大小選用相應的繼電器,如在大電流和強電磁場干擾的環境里工作,最好利用中間繼電器來間接控制。
3.程序軟體工作過程
(1)秒脈沖發生器秒脈沖發生器是由定時器T0和內存空間TT0配合完成的。T0工作於16位計數器模式,當T0向上計數由全1變為全0時產生中斷,本程序中T0的初值為0DC00H,大約0.01s中斷一次。這里使用的晶振頻率為11.0592MHz,由此可計算出日誤差約為0.78s。
圖4為程序流程圖。系統產生中斷後,首先保存ACC和PSW的值,然後為T0重裝初值,判斷中斷次數是否小於100,是則轉出中斷服務,反之則為秒計數器加1,秒計數器如果大於59,則為分計數器加1,同時秒計數器清0。同樣分計數器如大於59則為時計數器加1,同時分計數器清0,時計數器如大於23則清0並轉出中斷服務。T0中斷100次的時間剛好為1秒鍾。
(2)主程序上電復位過程:首先P0~P2口全部置1,P3口高5位置1,低3位置0。設置定時器T0工作於16位計數器模式,並賦初值TH0=0DCH,TL0=00H,關閉外部中斷和串列口中斷,時間計數器TS、TM、TH清0,所有預置時間存儲區全部賦值FFH,至此所有初始化工作完成。
主程序工作過程:首先循環進行六個數碼管掃描顯示(DISPLY段),然後比較所有預置時間(COMP段)是否與當前時間相等,如相等則轉向相應處理程序。在比較完成(或處理完成)後判斷有無按鍵(PP2段),沒有則返回繼續顯示、比較、判斷;有按鍵則轉向相應處理程序。按鍵轉移採用偏移量加表格跳轉轉移法(KEY段),簡單、明了。預置時間比較則採用逐一比較法,即對每一個預置值進行比較,如相等則做相應處理。具體比較時(COMP1段)先比較TH值,如不相等則直接轉出並置「時間到」標志CCB為0,如TH、TM、TS全部對應相等,則置該標志為1。
本程序在顯示及按鍵處理(設置過程)中巧妙使用R1寄存器作為公用地址寄存工具,對實時時間和預置時間的顯示和修改調用同一程序完成,使源代碼長度大大縮短,提高了程序的可讀性和運行效率。在本刊的網站(www.eleworld.com)上給出了源程序,供讀者參考。
4.製作與調試
(1)主板的製作與調試主板的製作稍微復雜一點。首先是製作印刷板,利用Protel99按照本文所示器件位置圖放置好元器件,然後手動布線(雙面),線寬為0.8mm左右,太寬做出的板子太大,太窄無法進行自製。繪好印製板圖後轉成BMP格式利用電腦刻字機鏤空(要用進口的即時貼紙,不然容易斷開),貼在雙面敷銅板上,就可以用FeCl3腐蝕了。具體的製作方法這里不再贅述,但最好在印製板布線時做個阻焊層,同時在即時貼上刻出來,當板子制好清洗干凈後敷在上面,用淺綠色油漆或清漆噴上薄薄的一層,好看又防腐蝕。
(2)元器件的選擇如果按照本文所附器件位置圖布線的話,數碼管需選用圖示型號才能安裝(5361BH,一拖三數碼管),選用不同型號數碼管時可能需修改器件位置參數,然後再布線即可;晶振為11.0592MHz;S1~S5選用黑色小型輕觸開關,S6則用紅色同類型開關;變壓器B選用15V、10W左右即可,V1硅堆應與B配合選用;控制繼電器根據需要選用適合的型號,如5、12、24V等,如果選用5V的,相應的B、V1可選小一點的,7812則不要。如選用24V的,那麼B、V1、7812、7805都需同時根據實際情況來選用;交流220V輸出插座沒有特殊要求,其耐壓和通流符合受控器件要求即可。其它元器件選用通用的就行。
(3)焊接元器件元器件購回後應先進行預處理(引腳打磨、上焊錫),然後逐一焊接。在焊接MCU(當然2051要燒好程序後才能焊接)和其它集成電路時應使用有良好接地的烙鐵(斷電焊接也可),以免被擊穿。由於雙面印刷板存在一個穿孔問題,器件引腳穿過後,兩面都要點上焊錫;如只是過孔,可用細銅線穿過並在兩面焊接後剪掉即可。
在印刷板製作良好,連線沒有不應有的開路或短路,且焊接沒有虛焊的情況下,不用調試即可正常工作(本程序已製作成品並調試通過,不需再行調試)。如果您覺得自己製作的印刷板不夠漂亮或太麻煩可聯絡凱思迪郵購(焊接好的整板也有),本刊網站有與凱思迪公司網站的鏈接。
(4)電源與控制板的製作可以將電源與控制板做在同一個板子上,也可分開製作,視所使用的情況而定,但JP1與JZ1之間的連線不宜太長。印刷板的製作同前所述,要注意的是在布線時對220V市電進入和輸出(包括中線)的線寬設計要寬一點(根據工作電流大小來定為好),還要注意市電與直流電源的隔離,以免在使用中造成觸電事故。
5.操作使用
本系統在加電後數碼管顯示「00.00.00」,輸出繼電器均不動作,此時可直接按S1、S2、S3鍵分別對時、分、秒進行調整,使當前時間與北京時間相符,時間設置過程中將停止計時,在設置好後按S4退出,時鍾即進入正常計時。如果要設置輸出控制的預置時間則先按S5,數碼管顯示「95.95.95」,此時可再按S1、S2、S3鍵分別對第一路輸出狀態ON的時、分、秒進行設置,設好後再按一次S5鍵,數碼管也顯示「95.95.95」,然後按S1、S2、S3鍵則分別對第一路輸出狀態OFF的時、分、秒進行設置,依此類推,按第七次時退出設定。任一路任一狀態被執行後其預置值即被清除,24小時後並不有效,如果需要每天循環執行則對程序進行簡單的修改即可(預置值不清除就可)。
6.改進與擴展
本文所述的AT89C2051在控制輸出時只使用了P3.0~P3.2三個口,所以只能控制三路六個狀態,如果把不用的P1.0~P1.2三個口用起來,則可控制六路十二個狀態,外圍電路相應增加三路繼電器,程序軟體只需稍事修改即可。當然如果需要控制更多路輸出狀態,那麼在使用鎖存器、解碼器、觸發器等後最多可以擴展到控制26=64路128個狀態。在對控制輸出的路數要求不多,而顯示部分需要比較多的情況下,如還要顯示年月日、農歷、星期等,只要對其進行擴展就可實現:P1.4~P1.7不動,選通端用兩個138,輸出口用P3.2~P3.5就有24=16個數碼顯示。這時仍然利用上述方法最多可擴展到控制25=32路64個狀態。當然年月日、農歷、星期的計算(如大月小月、閏年、閏月等)分別匯編相應的子程序插入即可

㈤ 單片機原理 ACC.7 是什麼意思程序如下

MOV A,VAR // 將 VER存到A
J Z COMP // 如果A=0,則跳轉到COMP
JNB ACC.7,POSI // 如果ACC.7 = 0,則轉移到POSI,ACC.7 就是A的最高位,這個是符號位,ACC.7 = 1 的話表明A的值是負數。如果ACC.7 不為0,並且前面JZ一句已經判斷出A不等於0了,所以A就只能大於0了。

有不明白繼續討論。

㈥ 單片機答案編程求16位補碼對應原碼

MOV A,comp+1

CLR C
MOV B,#1
SUBB A,B
CPL A
MOV comp+1,A

MOV B,#0
MOV A,COMP
SUBB A,B
CPL A
MOV COMP,A
源碼變補碼,取反加一
補碼變源碼,減一取反
這是匯編的,不知到你要會變還是c的,總之滿意的話贊一個!

㈦ 單片機comp字母各代表什麼

指的是單片機內部的比較器。
採用內部帶模擬比較器的單片機加上少量的外國元件,並在程序上稍作處理,就能夠構成一種新的A/D轉換器,該方法可節約因擴展A/D而佔用的大量I/O,而且這種A/D轉換器能達到很高的分辯率和精度,並且有抗干擾能力強、分辯率可由程序調整的特點,從而增加了單片機的應用范圍和使用靈活性,同時就應用系統的設計也顯得簡潔和不效。

㈧ 單片機 兩個有符號數分別在50H和51H裡面,比較他們的大小,最後把大的放入60H單元。

;比較有符號數的大小,可以先進行一次相減,
;再根據差的正負、是否溢出,來區分大小。
;程序如下:
;

ORG
0000H

MOV
50H,
#-28
;先隨便存入兩個數字.

MOV
51H,
#108
;========================================
BIJIAO:
;開始比較.

MOV
A,
50H

CLR
C

SUBB
A,
51H
;(50H)-(51H)

JZ
DA_50H
;差為0轉移.

JB
ACC.7,
FU
;負數轉移.

JB
OV,
DA_51H
;有溢出轉移.

SJMP
DA_50H
;正數且無溢出,轉到(50H)大.
;----------------------------------------
FU:
JB
OV,
DA_50H
;負數且有溢出,轉到(50H)大.
;----------------------------------------
DA_51H:
MOV
60H,
51H
;(51H)大的處理程序.

SJMP
BJ_END
;轉到結束.
;----------------------------------------
DA_50H:
MOV
60H,
50H
;(50H)大的處理程序.
;----------------------------------------
BJ_END:
SJMP
$
;比較程序結束.
;========================================
END

㈨ 單片機原理 ACC.7 是什麼意思程序如下

jb
acc.7,
neg
該指令是一條位操作指令
為條件轉移指令
即當累加器的最高位acc.7=1
時,滿足條件
程序將跳轉到neg

但如果acc.7=0
時,不滿足條件
程序就不跳轉了
將順序執行嚇一跳指令
符號說明:
操作碼中j表示轉移指令
b表示高電平
即為1轉移
源操作數acc.7
(為累加器第7位
即最高位)
是位操作數
目的操作數
neg為要跳轉的目標地址
呵呵
滿意就選滿意回答吧

㈩ 關於單片機的中斷服務配置

#include <iom16v.h>
#include <macros.h>
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}
TIMER0 initialize - prescale:1024 /*定時器預分頻,預分頻由TCCRn的CS02,CS01,CS00確定,詳情查看數據手冊*/
// WGM: Normal/*定時器,也由TCCRn確定*/
// desired value: 20mSec/*定時器期望設定時間*/
// actual value: 19.861mSec (0.7%)/*定時器實際定時時間,誤差比例*/
void timer0_init(void)
{
/*定時器停止,TCCR0寄存器完全控制timer0的運行情況,詳細可參考數據手冊。*/
TCCR0 = 0x00; //stop
TCNT0 = 0x71; //set count /*定時器寄存器開始值*/
OCR0 = 0x8F; //set compare /*定時器比較值*/
TCCR0 = 0x05; //start timer /*定時器開始*/
}
#pragma interrupt_handler timer0_comp_isr:20
void timer0_comp_isr(void)
{
//compare occured TCNT0=OCR0
}
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
TCNT0 = 0x71; //reload counter value
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer0_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x03; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}

閱讀全文

與單片機comp相關的資料

熱點內容
狄克斯特拉演算法是什麼 瀏覽:675
室內裝飾材料pdf 瀏覽:633
gitbook命令行 瀏覽:1000
啟動zookeeper命令 瀏覽:527
健身館app怎麼樣 瀏覽:314
python可視化項目 瀏覽:442
安卓機怎麼辨別蘋果機真假 瀏覽:711
微信小程序源碼轉成抖音 瀏覽:654
優省油app怎麼沒法下載 瀏覽:72
pdf格式轉換excel 瀏覽:625
高爾夫6壓縮機響 瀏覽:310
優盤文件夾自動恢復 瀏覽:76
有伺服器怎麼製作小程序 瀏覽:132
程序員怎麼避開外包公司 瀏覽:604
刺激戰場國際服體驗伺服器滿了怎麼辦 瀏覽:487
python的number是什麼意思 瀏覽:539
剪映app怎麼把視頻鏡像 瀏覽:464
python長連接消息提醒 瀏覽:767
山西省美術演算法 瀏覽:95
華為手機怎麼不給別人刪app 瀏覽:814