單片機(jī)PID算法實(shí)現(xiàn)_第1頁
單片機(jī)PID算法實(shí)現(xiàn)_第2頁
單片機(jī)PID算法實(shí)現(xiàn)_第3頁
單片機(jī)PID算法實(shí)現(xiàn)_第4頁
單片機(jī)PID算法實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、. . . . 單片機(jī)PID算法實(shí)現(xiàn)在網(wǎng)絡(luò)上收集了一個(gè)PID控制程序,看到很多研友的畢業(yè)設(shè)計(jì)可能涉與到PID控制,這是一個(gè)PID的程序,希望能做到拋磚引玉,僅供大家參考。/*/*/*             initial interrupter               */*/*/void init_interrupter(void) /*/TMOD=0x21; /* 設(shè)置計(jì)時(shí)器0工作于模式1,設(shè)置計(jì)時(shí)器1工作于模式2*/TL0=0x00;   /*

2、 T0=0000定時(shí)時(shí)間為71.1ms;71.1ms*151.066s*/TH0=0xdc;   /*T0=DC00定時(shí)時(shí)間為10ms;10ms*1001s*/ /*T0=FC66定時(shí)時(shí)間為1ms;10ms*10001s*/TL1=0xfd;   /* 設(shè)置串口通信速率9600bps*/TH1=0xfd;PCON=0x00; /* SMOD=0, 速率不倍增*/SCON=0x50; /* 8位數(shù)據(jù)通信,串行通信方式1,允許單片機(jī)接收數(shù)據(jù)*/IP=0x10;   /*serial is preferential*/IE=0x92;   /* 定時(shí)器0, 串

3、口中斷允許;定時(shí)器1中斷禁止*/rs485_receive=0;rs485_transmitte=0;TR0=1;     /* 啟動(dòng)定時(shí)器0*/TR1=1;     /* 啟動(dòng)定時(shí)器1*/void timer0_server(void) interrupt 1 using 1 /*/  TL0=0x00; TH0=0xdc;/*T0=DC00 timing interval is 10ms;10ms*1001s*/ /*T0=FC66 timing interval is 1ms;10ms*10001s*/  if (flag_se

4、rial=1)      timer0_counter_3+;    if (timer0_counter_3>11)            timer0_counter_3=0;        flag_serial=0;        pointer_serial_data=serial_data;        counter_serial_data=0;

5、        dog=!dog;/*Timer0 is full(10ms), feed dog*/  if (timing_interval=0) timing_interval=1; /*timing_interval is lost then set it to 1 second*/  timer0_counter_1+;/*timer0_counter_1 is software timer. when timer0 interrupt is full, it increase automatically*/  i

6、f (unsigned char) (timer0_counter_1/100)=timing_interval) /*timing_interval arrives*/      out_flag=1;/*indexing 占空比 high level begin*/    /*-scan 0809 to get current equipment's temperature-*/    scan_current_Temperature();    origina_address=0x82;&#

7、160;   display1_Temperature(current_Temperature,origina_address);    /*-calculate out_value-*/    PID_algorithm_function(PID_mode,PP,II,DD,BB,current_Temperature,seted_temperature);    /out_value=0.5;    if (out_value>0.0) /*out_value=0.0, then 占空比 is

8、zero*/            control_0=1;        ledctrl_address=0x8c;        leddata_address=0xff;        /reset timer0_counter_1 and timer0_counter_2,    timer0_counter_1=0; /indexing timing_interval's tim

9、ing    timer0_counter_2=0; /indexing 占空比's timing    if(out_flag=1)      timer0_counter_2+;    if (out_value<1.0)            if( (unsigned char) (timer0_counter_2/out_value/100) >= timing_interval)    

10、0;             timer0_counter_2=0;          control_0=0;          ledctrl_address=0x8c;          leddata_address=0x00;          out_flag=0;        

11、60;     float PID_algorithm_function(uchar PID_mode_2,float P_2,I_2,D_2,B_2,current_Temperature_2,seted_temperature_2)  float idata delta;  switch (PID_mode_2)      case 1: break;/*PID mode*/    case 2: D_2=0;     break;/*PI mode*/   

12、case 3: I_2=0;     break;/*PD mode*/    case 4: I_2=0; D_2=0; break;/*P mode*/    if (PID_mode_2<5)/*PID algorithm*/    ek=(seted_temperature_2-current_Temperature_2)/99.9;    delta=P_2*(ek-ek1)+I_2*ek+D_2*(ek-2.0*ek1+ek2);    out_value=

13、out_value+delta;    ek2=ek1;    ek1=ek;    if (out_value>1.0)            out_value=1;        else if (out_value<=0)            out_value=0.0;      if (PID_mode_2=5) /*BB

14、 algorithm*/      if (current_Temperature_2-seted_temperature_2>=B_2) out_value=0.0;    if (seted_temperature_2-current_Temperature_2>=B_2) out_value=1.0;    return (out_value);軟件練習(xí)十二:將十六進(jìn)制數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制數(shù)據(jù)實(shí)驗(yàn)?zāi)康模菏煜?1 單片機(jī)指令系統(tǒng),掌握程序設(shè)計(jì)方法。實(shí)驗(yàn)容:將R2 中的容轉(zhuǎn)換成十進(jìn)制數(shù)據(jù),然后將轉(zhuǎn)換的數(shù)據(jù)百位、十位

15、和個(gè)位分別存入R0指出的30H、31H 單元中。實(shí)驗(yàn)程序框圖:程序清單:ORG 00HAJMP MAINORG 30HMAIN: MOV SP,#5FHMOV R0,#30HMOV A,R2MOV B,#100DIV ABMOV R0,AINC R0MOV A,#10XCH A,BDIV ABSWAP AADD A,BMOV R0,ASJMP $END軟件練習(xí)十一:BCD 碼數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)實(shí)驗(yàn)?zāi)康模菏煜?1 單片機(jī)指令系統(tǒng),掌握程序設(shè)計(jì)方法。實(shí)驗(yàn)容:將R2 中的容轉(zhuǎn)換成二進(jìn)制數(shù)據(jù),并傳送到20H 單元中。實(shí)驗(yàn)程序框圖:實(shí)驗(yàn)步驟:將R2 送#99H 后,執(zhí)行程序得到結(jié)果是否與你預(yù)

16、計(jì)一致。程序清單:ORG 0000HAJMP MAINORG 0030HMAIN: MOV SP,#5FHMOV R2,#99HMOV A,R2SWAP AANL A,#0FHMOV B,#0AHMUL ABMOV R3,AMOV A,R2ANL A,#0FHADD R3,AMOV 20H,ASJMP $END思考:修改程序,將R2 中容換成其他數(shù)據(jù)。交通燈控制電路一、設(shè)計(jì)任務(wù)與要求1設(shè)計(jì)一個(gè)十字路口的交通燈控制電路,要求甲車道和乙車道兩條交叉道路上的車輛交替運(yùn)行,每次通行時(shí)間都設(shè)為25秒;2要求黃燈先亮5秒,才能變換運(yùn)行車道;3黃燈亮?xí)r,要求每秒鐘閃亮一次 。二、實(shí)驗(yàn)預(yù)習(xí)要求1復(fù)習(xí)數(shù)字系統(tǒng)設(shè)

17、計(jì)基礎(chǔ)。2復(fù)習(xí)多路數(shù)據(jù)選擇器、二進(jìn)制同步計(jì)數(shù)器的工作原理。3根據(jù)交通燈控制系統(tǒng)框圖,畫出完整的電路圖。三、設(shè)計(jì)原理與參考電路   1分析系統(tǒng)的邏輯功能,畫出其框圖   交通燈控制系統(tǒng)的原理框圖如圖12、1所示。它主要由控制器、定時(shí)器、譯碼器和秒脈沖信號發(fā)生器等部分組成。秒脈沖發(fā)生器是該系統(tǒng)中定時(shí)器和控制器的標(biāo)準(zhǔn)時(shí)鐘信號源,譯碼器輸出兩組信號燈的控制信號,經(jīng)驅(qū)動(dòng)電路后驅(qū)動(dòng)信號燈工作,控制器是系統(tǒng)的主要部分,由它控制定時(shí)器和譯碼器的工作。圖中: TL: 表示甲車道或乙車道綠燈亮的時(shí)間間隔為25秒,即車輛正常通行的時(shí)間間隔。定時(shí)時(shí)間到,TL

18、=1,否則,TL=0。      TY:表示黃燈亮的時(shí)間間隔為5秒。定時(shí)時(shí)間到,TY=1,否則,TY=0。      ST:表示定時(shí)器到了規(guī)定的時(shí)間后,由控制器發(fā)出狀態(tài)轉(zhuǎn)換信號。由它控制定時(shí)器開始下個(gè)工作狀態(tài)的定時(shí)。圖12、1 交通燈控制系統(tǒng)的原理框圖2畫出交通燈控制器的ASM(Algorithmic State Machine,算法狀態(tài)機(jī))   (1)圖甲車道綠燈亮,乙車道紅燈亮。表示甲車道上的車輛允許通行,乙車道禁止通行。綠燈亮足規(guī)定的時(shí)間隔

19、TL時(shí),控制器發(fā)出狀態(tài)信號ST,轉(zhuǎn)到下一工作狀態(tài)。   (2)甲車道黃燈亮,乙車道紅燈亮。表示甲車道上未過停車線的車輛停止通行,已過停車線的車輛繼續(xù)通行,乙車道禁止通行。黃燈亮足規(guī)定時(shí)間間隔TY時(shí),控制器發(fā)出狀態(tài)轉(zhuǎn)換信號ST,轉(zhuǎn)到下一工作狀態(tài)。   (3)甲車道紅燈亮,乙車道黃燈亮。表示甲車道禁止通行,乙車道上的車輛允許通行綠燈亮足規(guī)定的時(shí)間間隔TL時(shí),控制器發(fā)出狀態(tài)轉(zhuǎn)換信號ST,轉(zhuǎn)到下一工作狀態(tài)。   (4)甲車道紅燈亮,乙車道黃燈亮。表示甲車道禁止通行,乙車道上位過縣停車線的車輛停止通行,已過停車線的

20、車輛停止通行,已過停車線的車輛繼續(xù)通行。黃燈亮足規(guī)定的時(shí)間間隔TY時(shí),控制器發(fā)出狀態(tài)轉(zhuǎn)換信號ST,系統(tǒng)又轉(zhuǎn)換到第(1)種工作狀態(tài)。     交通燈以上4種工作狀態(tài)的轉(zhuǎn)換是由控制器器進(jìn)行控制的。設(shè)控制器的四種狀態(tài)編碼為00、01、11、10,并分別用S0、S1、S3、S2表示,則控制器的工作狀態(tài)與功能如表12、1所示,控制器應(yīng)送出甲、乙車道紅、黃、綠燈的控制信號。為簡便起見,把燈的代號和燈的驅(qū)動(dòng)信號合二為一,并作如下規(guī)定:    表12、1 控制器工作狀態(tài)與功能   控制狀態(tài) 信號燈狀態(tài)

21、 車道運(yùn)行狀態(tài)      S0(00) 甲綠,乙紅 甲車道通行,乙車道禁止通行      S1(01) 甲黃,乙紅 甲車道緩行,乙車道禁止通行      S3(11) 甲紅,乙綠 甲車道禁止通行,甲車道通行      S2(10) 甲紅,乙黃 甲車道禁止通行,甲車道緩行      AG=1:甲車道綠

22、燈亮;      BG=1:乙車道綠燈亮;      AY=1:甲車道黃燈亮;      BY=1:乙車道黃燈亮;      AR=1:甲車道紅燈亮;    BY=1:乙車道紅燈亮;    由此得到交通燈的ASM圖,如 圖12、2所示。設(shè)控制器的初始狀態(tài)為S0(用狀態(tài)框表示S0),當(dāng)S0的

23、持續(xù)時(shí)間小于25秒時(shí),TL=0(用判斷框表示TL),控制器保持S0不變。只有當(dāng)S0的持續(xù)時(shí)間等于25秒時(shí),TL=1,控制器發(fā)出狀態(tài)轉(zhuǎn)換信號ST(用條件輸出框表示ST),并轉(zhuǎn)換到下一個(gè)工作狀態(tài)。依此類推可以弄懂ASM圖所表達(dá)的含義。3單元電路的設(shè)計(jì)   (1)定時(shí)器    定時(shí)器由與系統(tǒng)秒脈沖(由時(shí)鐘脈沖產(chǎn)生器提供)同步的計(jì)數(shù)器構(gòu)成,要求計(jì)數(shù)器在狀態(tài)信號ST作用下,首先清零,然后在時(shí)鐘脈沖上升沿作用下,計(jì)數(shù)器從零開始進(jìn)行增1計(jì)數(shù),向控制器提供模5的定時(shí)信號TY和模25的定時(shí)信號TL。   計(jì)數(shù)器選

24、用集成電路74LS163進(jìn)行設(shè)計(jì)較簡便。74LS163是4位二進(jìn)制同步計(jì)數(shù)器,它具有同步清零、同步置數(shù)的功能。74LS163的外引線排列圖和時(shí)序波形圖如圖12、3所示,其功能表如表12、2所示。圖中, 是低電平有效的同步清零輸入端, 是低電平有效才同步并行置數(shù)控制端,CTp、CTT是計(jì) 圖12、2 交通燈的ASM圖數(shù)控制端,CO是進(jìn)位輸出端,D0D3是并行數(shù)據(jù)輸入端,Q0Q 3是數(shù)據(jù)輸出端。由兩片74LS163級聯(lián)組成的定時(shí)器電路如圖12、4所示。電路的工作原理請自行分析。 (a)圖12、3 74LS163的外引線排列圖和時(shí)序波形圖   (2)控制器 &

25、#160;  控制器是交通管理的核心,它應(yīng)該能夠按照交通管理規(guī)則控制信號燈工作狀態(tài)的轉(zhuǎn)換。從ASM圖可以列出控制器的狀態(tài)轉(zhuǎn)換表,如表12、3所示。選用兩個(gè)D觸發(fā)器FF1、FFO做為時(shí)序寄存器產(chǎn)生 4種狀態(tài),控制器狀態(tài)轉(zhuǎn)換的條件為TL和TY,當(dāng)控制器處于Q1n+1Q0n+1 00狀態(tài)時(shí),如果TL 0,則控制器保持在00狀態(tài);如果,則控制器轉(zhuǎn)換到Q1n+1Q0n+1 01狀態(tài)。這兩種情況與條件TY無關(guān),所以用無關(guān)項(xiàng)"X"表示。其余情況依次類推,同時(shí)表中還列出了狀態(tài)轉(zhuǎn)換信號ST。圖12、4 定時(shí)器電路圖表12、2 74LS163功能表|表12、3 控制器狀態(tài)轉(zhuǎn)

26、換表    根據(jù)表12、3、可以推出狀態(tài)方程和轉(zhuǎn)換信號方程,其方法是:將Q1n+1、Q0n+1和 ST為1的項(xiàng)所對應(yīng)的輸人或狀態(tài)轉(zhuǎn)換條件變量相與,其中"1"用原變量表示,"0"用反變量表示,然后將各與項(xiàng)相或,即可得到下面的方程:    根據(jù)以上方程,選用數(shù)據(jù)選擇器 74LS153來實(shí)現(xiàn)每個(gè)D觸發(fā)器的輸入函數(shù),將觸發(fā)器的現(xiàn)態(tài)值( )加到74LS153的數(shù)據(jù)選擇輸入端作為控制信號即可實(shí)現(xiàn)控制器的功能??刂破鞯倪壿媹D如圖12、5所示。圖中R、C構(gòu)成上電復(fù)位電路 。圖 12、5控制器

27、邏輯圖 (3)譯碼器     譯碼器的主要任務(wù)是將控制器的輸出 Q1、 Q0的4種工作狀態(tài),翻譯成甲、乙車道上6個(gè)信號燈的工作狀態(tài)??刂破鞯臓顟B(tài)編碼與信號燈控制信號之間的關(guān)系如表 12、4所示。實(shí)現(xiàn)上述關(guān)系的譯碼電路請讀者自行設(shè)計(jì)。四、實(shí)驗(yàn)儀器設(shè)備1 數(shù)字電路實(shí)驗(yàn)箱2 集成電路74LS74 1片,74LS10 1片,74LS00 2片,74LS153 2片,74LS163 2片,NE555 1片3 電阻 51K 1只,200 6只4 電容 10Uf 1只5 其它 發(fā)光二極管 6只五、實(shí)驗(yàn)容與方法    表12、4控

28、制器狀態(tài)編碼與信號燈關(guān)系表狀態(tài)AG AY ARBG BY BR001    0    0 0    0    1010    1    00     0     1100    0    11     0

29、60;    0110    0    10     1     01設(shè)計(jì)、組裝譯碼器電路,其輸出接甲、乙車道上的6只信號燈(實(shí)驗(yàn)時(shí)用發(fā)光二極管代替),驗(yàn)證電路的邏輯功能。2設(shè)計(jì)、組裝秒脈沖產(chǎn)生電路。 3組裝、調(diào)試定時(shí)電路。當(dāng) CP信號為 1Hz正方波時(shí),畫出CP、 Q0、 Q1、 Q2、Q3、Q4、TL、TY的波形,并注意它們之間一的時(shí)序關(guān)系。4組裝、調(diào)試控制器電路。5完成交通燈控制電路的聯(lián)調(diào),

30、并測試其功能。六路搶答器(KT230配套實(shí)驗(yàn))六路搶答器實(shí)驗(yàn)(KT230套件配套程序)*KT230學(xué)習(xí)套件適用,需外擴(kuò)八個(gè)小開關(guān)                                       &#

31、160;                                      1、如果想調(diào)節(jié)搶答時(shí)間或答題時(shí)間,按"搶答時(shí)間調(diào)節(jié)"鍵或"答題時(shí)間調(diào)節(jié)"鍵進(jìn)入調(diào)節(jié)狀態(tài),此時(shí)會顯示現(xiàn)在設(shè)定

32、的搶答時(shí)間或回答時(shí)間值,如想加一秒按一下"加1s"鍵,如果想減一秒按一下"-1s"鍵,時(shí)間LED上會顯示改變后的時(shí)間,調(diào)整圍為0s99s, 0s時(shí)再減1s會跳到99,99s時(shí)再加1s會變到0s。                              

33、60;                                          2、主持人按"搶答開始"鍵,會有提示音,并立刻進(jìn)入搶答倒計(jì)時(shí)(預(yù)設(shè)15s搶答時(shí)間

34、),如有選手搶答,會有提示音,并會顯示其號數(shù)并立刻進(jìn)入回答倒計(jì)時(shí)(預(yù)設(shè)10s搶答時(shí)間),不進(jìn)行搶答查詢,所以只有第一個(gè)按搶答的選手有效。倒數(shù)時(shí)間到小于5s會每秒響一下提示音。                                   

35、60;                                                 

36、60;        3、如倒計(jì)時(shí)期間,主持人想停止倒計(jì)時(shí)可以隨時(shí)按"停止"按鍵,系統(tǒng)會自動(dòng)進(jìn)入準(zhǔn)備狀態(tài),等待主持人按"搶答開始"進(jìn)入下次搶答計(jì)時(shí)。                            

37、60;                                                 

38、60;                         4、如果主持人未按"搶答開始"鍵,而有人按了搶答按鍵,犯規(guī)搶答,LED上不斷閃爍FF和犯規(guī)號數(shù)并響個(gè)不停,直到按下"停止" 鍵為止。 *P1.0為開始搶答,P1.7為停止,p1.1-p1.6為六路搶答輸入 數(shù)碼管段選P0口,位選P2口,蜂鳴器輸出為P3.

39、6口。* OK EQU 20H;搶答開始標(biāo)志位;將P1口與P2口互換,P3.0-P1.0,P3.1-P1.7 RING EQU 22H;響鈴標(biāo)志位 ORG 0000H AJMP MAIN ORG 0003H AJMP INT0SUB ORG 000BH AJMP T0INT ORG 0013H AJMP INT1SUB ORG 001BH AJMP T1INT ORG 0040HMAIN:   MOV R1,#0FH;初設(shè)搶答時(shí)間為15s

40、0;       MOV R2,#0AH;初設(shè)答題時(shí)間為10s        MOV TMOD,#11H;設(shè)置未定時(shí)器/模式1        MOV TH0,#0F0H        MOV TL0,#0FFH;越高發(fā)聲頻率越高,越尖        MOV T

41、H1,#3CH        MOV TL1,#0B0H;50ms為一次溢出中斷        SETB EA        SETB ET0        SETB ET1 SETB EX0 SETB EX1;允許四個(gè)中斷,T0/T1/INT0/INT1   

42、0;    CLR OK CLR RING         SETB TR1         SETB TR0;一開始就運(yùn)行定時(shí)器,以開始顯示FFF.如果想重新計(jì)數(shù),重置TH1/TL1就可以了;=查詢程序=START:   MOV R5,#0BH         MOV R4,#0BH &

43、#160;       MOV R3,#0BH ACALL DISPLAY;未開始搶答時(shí)候顯示FFF         P1.0,NEXT;ddddddd         ACALL DELAY         P1.0,NEXT;去抖動(dòng),如果"開始鍵"按下就向下執(zhí)行,否

44、者跳到非法搶答查詢         ACALL BARK;按鍵發(fā)聲         MOV A,R1  MOV R6,A;送R1->R6,因?yàn)镽1中保存了搶答時(shí)間     SETB OK;搶答標(biāo)志位,用于COUNT只程序中判斷是否查詢搶答     MOV R3,0AH;搶答只顯示計(jì)時(shí),滅號數(shù)    &#

45、160;   AJMP COUNT;進(jìn)入倒計(jì)時(shí)程序,"查詢有效搶答的程序"在COUNT里面NEXT:   JNB P1.1,FALSE1    JNB P1.2,FALSE2    JNB P1.3,FALSE3    JNB P1.4,FALSE4    JNB P1.5,FALSE5    JNB P1.6,FALSE6    AJMP START;=非

46、法搶答處理程序=FALSE1: ACALL BARK;按鍵發(fā)聲MOV R3,#01H    AJMP ERRORFALSE2: ACALL BARKMOV R3,#02H    AJMP ERRORFALSE3: ACALL BARKMOV R3,#03H    AJMP ERRORFALSE4: ACALL BARKMOV R3,#04H    AJMP ERRORFALSE5: ACALL BARKMOV R3,#05H    AJMP ER

47、RORFALSE6: ACALL BARKMOV R3,#06H    AJMP ERROR;=INT0(搶答時(shí)間R1調(diào)整程序)=INT0SUB:MOV A,R1        MOV B,#0AH    DIV AB    MOV R5,A    MOV R4,B    MOV R3,#0AH    ACALL DISPLAY;先在兩個(gè)時(shí)間LED

48、上顯示R1    JNB P3.4,INC0;P3.4為+1s鍵,如按下跳到INCO    JNB P3.5,DEC0;P3.5為-1s鍵,如按下跳到DECO    JNB P1.7,BACK0;P3.1為確定鍵,如按下跳到BACKO    AJMP INT0SUBINC0:   MOV A,R1    CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99了,R1就置0,重新加起。  &#

49、160;     MOV R1,#00H        ACALL DELAY1AJMP INT0SUBADD0:   INC R1        ACALL DELAY1        AJMP INT0SUBDEC0:   MOV A,R1    JZ SETR1;如果R1為

50、0, R1就置99,    DEC R1    ACALL DELAY1    AJMP INT0SUBSETR1:  MOV R1,#63H        ACALL DELAY1        AJMP INT0SUBBACK0:  RETI ;=INT1(回答時(shí)間R2調(diào)整程序)=INT1SUB:MOV A,R2  

51、0;     MOV B,#0AH    DIV ABMOV R5,A    MOV R4,B    MOV R3,#0AH    ACALL DISPLAY    JNB P3.4,INC1    JNB P3.5,DEC1    JNB P1.7,BACK1    AJMP INT1SUBINC1: &#

52、160; MOV A,R2    CJNE A,#63H,ADD1        MOV R2,#00H        ACALL DELAY1AJMP INT1SUBADD1:   INC R2        ACALL DELAY1        AJMP INT1

53、SUBDEC1:   MOV A,R2    JZ SETR2    DEC R2    ACALL DELAY1    AJMP INT1SUBSETR2:  MOV R2,#63H        ACALL DELAY1        AJMP INT1SUBBACK1:  RETI ;=倒計(jì)時(shí)

54、程序(搶答倒計(jì)時(shí)和回答倒計(jì)時(shí)都跳到改程序)=COUNT:  MOV R0,#00H;重置定時(shí)器中斷次數(shù)        MOV TH1,#3CH        MOV TL1,#0B0H;重置定時(shí)器RECOUNT:MOV A,R6;R6保存了倒計(jì)時(shí)的時(shí)間,之前先將搶答時(shí)間或回答時(shí)間給R6        MOV B,#0AH    DIV AB;除十分

55、出個(gè)位/十位    MOV 30H,A;十位存于(30H)    MOV 31H,B;個(gè)位存于(31H)    MOV R5,30H;取十位    MOV R4,31H;取個(gè)位    MOV A,R6    SUBB A,#07H    JNC LARGER;大于5s跳到LARGER,小于等于5s會提醒    MOV A,R0  

56、0;     CJNE A,#0AH,FULL;1s中0.5s向下運(yùn)行    CLR RING     AJMP CHECKFULL:   CJNE A,#14H,CHECK;下面系1s的情況,響并顯示號數(shù)并清R0,重新計(jì)        SETB RING        MOV A,R6    JZ

57、 QUIT;計(jì)時(shí)完畢    MOV R0,#00H    DEC R6;一秒標(biāo)志減1    AJMP CHECKLARGER: MOV A,R0        CJNE A,#14H,CHECK;如果1s向下運(yùn)行,否者跳到查"停/顯示"    DEC R6;計(jì)時(shí)一秒R6自動(dòng)減1    MOV R0,#00HCHECK: JNB P1.7,QUIT;如按下停止

58、鍵退出       ACALL DISPLAY   OK,ACCOUT;如果是搶答倒計(jì)時(shí),如是則查詢搶答,否者跳過查詢繼續(xù)倒數(shù)(這里起到鎖搶答作用)   AJMP RECOUNTACCOUT:JNB P1.1,TRUE1   JNB P1.2,TRUE2   JNB P1.3,TRUE3   JNB P1.4,TRUE4   JNB P1.5,TRUE5   JNB P1.6,TRUE5 

59、;  AJMP RECOUNTQUIT:  CLR OK;如果按下了"停止鍵"執(zhí)行的程序   CLR RING   AJMP START;=正常搶答處理程序=TRUE1: ACALL BARK;按鍵發(fā)聲       MOV A,R2   MOV R6,A;搶答時(shí)間R2送R6   MOV R3,#01H   CLR OK;因?yàn)榇痤}的計(jì)時(shí)不再查詢搶答,所以就鎖了搶答   AJMP

60、COUNTTRUE2:ACALL BARK;      MOV A,R2  MOV R6,A  MOV R3,#02H  CLR OK  AJMP COUNTTRUE3:ACALL BARK;      MOV A,R2  MOV R6,A  MOV R3,#03H  CLR OK  AJMP COUNTTRUE4:ACALL BARK;      MOV A,R2&

61、#160;   MOV R6,A    MOV R3,#04H    CLR OK    AJMP COUNTTRUE5:  ACALL BARK;        MOV A,R2    MOV R6,A    MOV R3,#05H    CLR OK    AJMP COUNTTRUE

62、6:  ACALL BARK;        MOV A,R2    MOV R6,A    MOV R3,#06H    CLR OK    AJMP COUNT;=犯規(guī)搶答程序=ERROR:  MOV R0,#00H        MOV TH1,#3CH     

63、   MOV TL1,#0B0H        MOV 34H,R3;犯規(guī)號數(shù)暫存與(34H)HERE:   MOV A,R0        CJNE A,#0AH,FLASH;0.5s向下運(yùn)行->滅并停響    CLR RING     MOV R3,#0AH    MOV R4,#0AH        MOV R5,#0AH;三燈全滅    AJMP CHECK1FLASH:  CJNE A,#14H,CHECK1;下面系1s的情況,響并顯示號數(shù)并清R0,重新計(jì)   

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論