單片機C語言編程ppt課件_第1頁
單片機C語言編程ppt課件_第2頁
單片機C語言編程ppt課件_第3頁
單片機C語言編程ppt課件_第4頁
單片機C語言編程ppt課件_第5頁
已閱讀5頁,還剩56頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片機C語言應用程序設計 主講教師:廉哲:17434548:40210518辦公室:綜合樓C318;單片機C語言應用程序設計 5151單片機硬件構造單片機硬件構造C51C51根底知識及其根本程序設計根底知識及其根本程序設計C51C51函數、數組、指針定義及運用函數、數組、指針定義及運用單片機內部資源及其單片機內部資源及其C C言語編程言語編程單片機資源擴展及其單片機資源擴展及其C C言語編程言語編程綜合程序設計綜合程序設計考試考試;單片機C語言應用程序設計 四四 C51編程設計編程設計4.1 MCS-51內部資源運用的內部資源運用的C言語編程言語編程4.2 MCS-51片外擴展的片外擴展的C言

2、語編程言語編程4.3 頻率量丈量的頻率量丈量的C言語編程言語編程;單片機C語言應用程序設計 4.1 MCS-51內部資源運用的內部資源運用的C言語編程言語編程4.1.1 中斷運用的中斷運用的C言語編程言語編程 C51編譯器支持在編譯器支持在C源程序中直接開發(fā)中斷程序。源程序中直接開發(fā)中斷程序。中斷效力程序是經過按規(guī)定語法格式定義的一個函數。中斷效力程序是經過按規(guī)定語法格式定義的一個函數。 中斷效力程序的函數定義的語法格式如下:中斷效力程序的函數定義的語法格式如下: 前往值前往值 函數名函數名(參數參數) interrupt musing n ;單片機C語言應用程序設計 表表4.1 MCS-51

3、中斷源編號中斷源編號編 號中 斷 源入 口 地 址0外部中斷00003H1定時器/計數器0000BH2外部中斷10013H3定時器/計數器1001BH4串行口中斷0023H;單片機C語言應用程序設計 using n 選項用于實現任務存放器組的切換,n是中斷效力子程序中選用的任務存放器組號(0 3)。在許多情況下,呼應中斷時需維護有關現場信息,以便中斷前往后,能使中斷前的源程序從斷點處繼續(xù)正確地執(zhí)行下去。這在MCS-51單片機中,能很方便地利用任務存放器組的切換來實現。即在進入中斷效力程序前的程序中運用一組任務存放器,進入中斷效力程序后,由using n切換到另一組存放器,中斷前往后又恢復到原存

4、放器組。這樣相互切換的兩組存放器中的內容彼此都沒有被破壞。;單片機C語言應用程序設計 圖圖 4.1 擴展多個中斷源擴展多個中斷源 例例1 圖圖7.5所示是利用優(yōu)先權解碼芯片,在單片機所示是利用優(yōu)先權解碼芯片,在單片機8031的一的一個外部中斷個外部中斷INT1上擴展多個中斷源的原理電路圖。圖中是以開上擴展多個中斷源的原理電路圖。圖中是以開封鎖合來模擬中斷懇求信號。當有任一中斷源產生中斷懇求,能封鎖合來模擬中斷懇求信號。當有任一中斷源產生中斷懇求,能給給8031的的INT1引腳送一個有效中斷信號,由引腳送一個有效中斷信號,由P1的低的低3位可得對應位可得對應中斷源的中斷號。中斷源的中斷號。;單片

5、機C語言應用程序設計 在中斷效力程序中僅設置標志,并保管I/O口輸入形狀。Franklin C51編譯器提供定義特定MCS-51系列成員的存放器頭文件。MCS-51頭文件為reg51.h。C51程序如下: # include unsigned char status; bit flag; void service_int1( ) interrupt 2 using 2 /* INT1中斷效力程序,運用第2組工作存放器 */ flag=1; /* 設置標志 */ status=p1; /* 存輸入口形狀 */ void main(void) IP=0 x04 ; /* 置INT1為高優(yōu)先級中斷

6、*/ IE=-0 x84 ; /* INT1開中斷,CPU開中斷 */;單片機C語言應用程序設計 for(; ;) if(flag) /* 有中斷 */ switch(status) /* 根據中斷源分支 */ case 0 : break ; /* 處置IN0 */ case 1 : break ; /* 處置IN1 */ case 2 : break; /* 處置IN2 */ case 3 : break; /* 處置IN3 */ default : ; flag=0 ; /* 處置完成清標志 */ ;單片機C語言應用程序設計 4.1.2 定時器定時器/計數器計數器(T/C)運用的運用的C

7、言語編程言語編程 例例2 設單片機的設單片機的fosc=12 MHz晶振,要求在晶振,要求在P1.0腳上輸出周腳上輸出周期為期為2 ms的方波。的方波。 周期為周期為2 ms的方波要求定時時間隔的方波要求定時時間隔1 ms,每次時間到,每次時間到P1.0取取反。反。 機器周期機器周期=12/fosc=1 s 需計數次數需計數次數=1000/(12/fosc)=1000/1=1000 由于計數器是加由于計數器是加1計數,為得到計數,為得到1000個計數之后的定時器溢個計數之后的定時器溢出,必需給定時器置初值為出,必需給定時器置初值為-1000(即即1000的補數的補數)。;單片機C語言應用程序設

8、計 (1) 用定時器0的方式1編程,采用查詢方式,程序如下: # include sbit P1_0=P10 ; void main(void) TMOD=0 x01 ; /* 設置定時器1為非門控制方式1*/ TR0=1 ; /* 啟動 T/C0 */ for( ; ;) TH0= -(1000/256) ; /* 裝載計數器初值 */ TL0= -(1000%256) ; do while (!TF0) ; /* 查詢等待TF0置位 */ P1_0=!P1_0; /* 定時時間到P1.0反相 */ TF0=0; /* 軟件清 TF0 */ ;單片機C語言應用程序設計 (2) 用定時器0的方

9、式1編程,采用中斷方式。程序如下: # include sbit P1_0=P10 ; void time (void) interrupt 1 using 1 /* T/C0中斷效力程序入口 */ P1_0=!P1_0 ; /* P1.0取反 */ TH0= -(1000/256); / * 重新裝載計數初值 */ void main( void ) TMOD=0 x01 ; /* T/C0任務在定時器非門控制方式1 */ P1_0=0; TH0= -(1000/256 ); /* 預置計數初值 */ TL0= -(1000%256) ; EA=1 ; /* CPU中斷開放 */ ET0=

10、1 ; /* T/C0中斷開放 */ TR0=1 ; /* 啟動T/C0開場定時 */ do while(1) ; /* 等待中斷 */ ;單片機C語言應用程序設計 例例3 采用采用10 MHz晶振,在晶振,在P1.0腳上輸出周期為腳上輸出周期為2.5 s,占空,占空比比20%的脈沖信號。的脈沖信號。 10 MHz晶振,運用定時器最大定時幾十毫秒。取晶振,運用定時器最大定時幾十毫秒。取10 ms定定時,周期時,周期2.5 s需需250次中斷,占空比次中斷,占空比20%,高電平應為,高電平應為50次中斷。次中斷。 10 ms定時,晶振定時,晶振fosc=10 MHz。 需定時器計數次數需定時器計

11、數次數=1010310/12=8333# include # define uchar unsigned charuchar period=250;uchar high=50;;單片機C語言應用程序設計 timer0( )interrupt 1 using 1 /* T/C0中斷效力程序 */TH0= - 8333/256 ; /* 重置計數值 */TL0= - 8333%256 ; if(+time=high)P1=0; /* 高電平常間到變低 */else if (time=period) /* 周期時間到變高 */time=0 ;P1=1 ; ;單片機C語言應用程序設計 main( )

12、TMOD=0 x01 ; /* 定時器0方式1 */ TH0= - 8333/256 ;/* 預置計數初值 */ TL0= - 8333%256 ; EA=1; /* 開CPU中斷 */ ET0=1 ; /* 開T/C0中斷 */ TR0=1 ; /* 啟動T/C0 */ do while(1) ; ;單片機C語言應用程序設計 圖2.2 中斷效力程序流程圖 ;單片機C語言應用程序設計 產生一個占空比變化脈沖信號的程序,它產生的脈寬調制信號用于電機變速控制。# include # define uchar unsigned char # define uint unsigned int unch

13、ar time,status,percent,period;bit one_round;uint oldcount,target=500;void pulse (void) interrupt 1 using 1 /* T/C0中斷效力程序 */ TH0= - 833/256 ; /* 1ms - -10 MHz */;單片機C語言應用程序設計 TL0= - 833%256 ; ET0=1 ; if (+time=percent) P1=0 ; else if (time= =100 ) time=0 ; P1=1; void tachmeter ( void ) interrupt 2 us

14、ing 2 /* 外中斷1效力程序 */ union unit word ; struct uchar hi ; uchar lo ; byte ; ;單片機C語言應用程序設計 newcount ; newcount. byte. hi=TH1; newcount .byte .lo=TL1 ; period=newcount .word - oldcount ; /* 測得周期 */ oldcount=newcount .word ; one_round=1; /* 每轉一圈,引起中斷,設置標志 */ void main ( void ) IP=0 x04 ; /* 置INT1為高位優(yōu)先級

15、*/ TMOD= 0 x11 ; /* T0,T1 16位方式 */ TCON=0 x54 ; /* T0,T1運轉,IT1邊沿觸發(fā) */;單片機C語言應用程序設計 TH1=0;TL1=0; /* 設置初始計數值 */ IE=0 x86 ; /* 允許中斷EX1,ET0 */ for (; ;) if (one_round ) /* 每轉一圈,調整 */ if ( period target ) if (percent 0 ) - -percent ; / * 占空比減 */ one_round=0 ; ;單片機C語言應用程序設計 4.1.3 串行口運用的串行口運用的C言語編程言語編程 例例4

16、 單片機單片機fosc=11.0592 MHz,波特率為,波特率為9600,各設置,各設置32字節(jié)字節(jié)的隊列緩沖區(qū)用于發(fā)送接納。設計單片機和終端或另一計算機通的隊列緩沖區(qū)用于發(fā)送接納。設計單片機和終端或另一計算機通訊的程序。訊的程序。 單片機串行口初始化成單片機串行口初始化成9600波特,中斷程序雙向處置字符,程波特,中斷程序雙向處置字符,程序雙向緩沖字符。背景程序可以序雙向緩沖字符。背景程序可以放入放入和和提取提取在緩沖區(qū)的字符在緩沖區(qū)的字符串,而實踐傳入和傳出串,而實踐傳入和傳出SBUF的動作由中斷完成。的動作由中斷完成。 Loadmsg 函數加載緩沖數組,標志發(fā)送開場。緩沖區(qū)分發(fā)函數加載

17、緩沖數組,標志發(fā)送開場。緩沖區(qū)分發(fā)(t)和收和收(r)緩沖,緩沖區(qū)經過兩種指示緩沖,緩沖區(qū)經過兩種指示(進進in和出和出out)和一些標志和一些標志(滿滿full,空空empty,完成,完成done)管理。隊列緩沖區(qū)管理。隊列緩沖區(qū)32字節(jié)接納緩沖字節(jié)接納緩沖(r_buf)區(qū)區(qū)滿,不能再有字符插入。當滿,不能再有字符插入。當t_in=t_out,發(fā)送緩沖區(qū),發(fā)送緩沖區(qū)(t_buf)空,發(fā)空,發(fā)送中斷去除,停頓送中斷去除,停頓UART懇求。詳細程序如下:懇求。詳細程序如下:;單片機C語言應用程序設計 # include # define uchar unsigned char uchar xda

18、ta r_buf32 ; /* item1 */uchar xdata t_buf32 ;uchar r_in , r_out , t_in , t_done ; /* 隊列指針 */bit r_full , t_empty , t_done ; /* item2 */code uchar m = this is a test program rn ;serial ( ) interrupt 4 using 1 /* item3 */ if( RI & r_full ) r_bufr_in=SBUF ; RI=0 ;;單片機C語言應用程序設計 r_in= +r_in & ox1

19、f ; if ( r_in= =r_out ) r_full=1; else if (TI & t_empty ) SBUF=t_buf t_out ; TI=0; t_out = + t_out & 0 x1f ; i f ( t_out= =t_in ) t_empty=1 ; else if (TI ) TI=0; t_done=1 ; ;單片機C語言應用程序設計 void loadmsg (uchar code * msg ) /* item4 */ while (*msg !=0 )& ( t_in+1)t_out ) & 0 x1f ) !=0 )

20、/ *測試緩沖區(qū)滿 */ t_ buf t_in= * msg ; msg+ ; t_in = + t_in & 0 x1f ; if ( t_done ) TI = 1 ; t_empty =t_done =0 ; /* 完成重新開場 */ ;單片機C語言應用程序設計 void process (uchar ch ) return ; / * item5 */ /* 用戶定義 */ void processmsg ( void ) /* item6 */ while ( r_out+1 ) r_in) !=0 ) /* 接納非緩沖區(qū) */ process ( r_buf r_out

21、) ; r_out= +r_out & 0 x1f ; ;單片機C語言應用程序設計 main ( ) /* item7 */ TMOD=0 x20 ; /* 定時器1方式2 */ TH1=0 xfd ; /* 9600波特11.0592 MHz */ TCON=0 x40 ; /* 啟動定時器1 */ SCON=0 x50 ; /* 允許接納 */ IE=0 x90 ; /* 允許串行口中斷 */ t_empty=t_done=1 ; r_full =0 ; r_out=t_in =0 ; r_ in=1 ; /* 接納緩沖和發(fā)送緩沖置空 */ for ( ; ; ) loadmsg

22、( & m ) ; processmsg ( ); ;單片機C語言應用程序設計 item1 :背景程序放入和提取字符隊列緩沖區(qū)。 item2 :緩沖區(qū)形狀標志。 item3 :串行口中斷效力程序,從RI,TI判別接納或發(fā)送中斷,由軟件去除。判別緩沖區(qū)形狀(滿full,空empty)和全部發(fā)送完成(done)。 item4 :此函數把字符串放入發(fā)送緩沖區(qū),預備發(fā)送。 item5 :接受字符的處置程序,實踐運用自定義。 item6 :此函數逐一處置接納緩沖區(qū)的字符。 item7 :主程序即背景程序,進展串行口的初始化,載入字符串,處置接納的字符串。;單片機C語言應用程序設計 4.2 MCS

23、-51片外擴展的片外擴展的C言語編程言語編程4.2.1 8255與與8031接口接口C運用程序舉例運用程序舉例 例例5 8255控制打印機??刂拼蛴C。 圖圖7.7是是8031擴展擴展8255與打印機接口的電路。與打印機接口的電路。8255的片選線為的片選線為P0.7,打印機與,打印機與8031采用查詢方式交換數據。打印機的形狀信號采用查詢方式交換數據。打印機的形狀信號輸入給輸入給PC7,打印機忙時,打印機忙時BUSY=1,微型打印機的數據輸入采用,微型打印機的數據輸入采用選通控制,當選通控制,當-STB上負跳變時數據被輸入。上負跳變時數據被輸入。8255采用方式采用方式0由由PC0模擬產生模

24、擬產生-STB信號。信號。 按照接口電路,口按照接口電路,口A地址為地址為7CH,口,口C地址為地址為7EH,命令口地,命令口地址為址為7FH,PC7PC4輸入,輸入,PC3PC0輸出。方式選擇命令字為輸出。方式選擇命令字為8EH。;單片機C語言應用程序設計 圖4.3 8031擴展8255與打印機接口的電路 ;單片機C語言應用程序設計 向打印機輸出字符串WELCOME的程序如下:# include # include # define uchar unsigned char # define COM8255 XBYTE0 x007f /* 命令口地址 */# define PA8255 XBY

25、TE 0 x007c /* 口A地址 */# define PC8255 XBYTE 0 x007e /* 口C 地址 */void toprn ( uchar *p ) / * 打印字符串函數 */ while ( * p!= 0) while ( 0 x80 & PC8255 )! =0 ) ; /* 查詢等待打印機的BUSY形狀*/ ;單片機C語言應用程序設計 PA8255 = * p ; /* 輸出字符 */ COM8255 = 0 x00 ; /* 模擬STB脈沖 */ COM8255=0 x01 ; p+ ; void main ( void ) uchar idata p

26、rn = WELCOME; /* 設測試用字符串 */ COM8255=0 x8e ; /* 輸出方式選擇命令 */ toprn ( prn ) ; /* 打印字符串 */ ;單片機C語言應用程序設計 例例6 EPROM編程器。編程器。 由由8031擴展擴展1片片EPROM2716、2片片SRAM6116及及1片片8255構成構成EPROM編程器,編程對象是編程器,編程對象是EPROM2732。擴展編程系統中。擴展編程系統中2716用來存放固化用監(jiān)控程序,用戶的待固化程序放在用來存放固化用監(jiān)控程序,用戶的待固化程序放在2片片6116中。中。8255的口的口A作編程器數據口,口作編程器數據口,口

27、B輸出輸出2732的低的低8位地址,位地址,PC3PC0輸出輸出2732高高4位地址,位地址,PC7作作2732啟動堅持控制器與啟動堅持控制器與PGM銜接。銜接。 譯碼地址為:譯碼地址為:6116(1):0800H;6116(2):1000H17FFH;8255的口的口A:07FCH;口;口B:07FDH;口;口C:07FEH;命令口:;命令口:07FFH。;單片機C語言應用程序設計 8255的口A、口B、口C均任務在方式0輸出,方式選擇命令字為80H;2732的啟動編程和停頓編程,由PC7的復位/置位控制,當PC7=0時啟動編程,PC7=1時,編程無效。 EPROM編程如下所示,參數為RAM

28、起始地址、EPROM起始地址和編程字節(jié)數。# include # include # define COM8255 XBYTE 0 x07ff # define PA8255 XBYTE 0 x07fc# define PB8255 XBYTE 0 x07fd # define PC8255 XBYTE 0 x07fe # define uchar unsigned char # define uint unsigned int ;單片機C語言應用程序設計 void d1_ms ( unit x ) ;void program (ram , eprom , con )uchar xdata *

29、 ram ; /* RAM起始地址 */uint eprom , con ; /* EPROM起始固化地址,固化長度 */ int i ; COM8255=0 x08 ; /* 送方式選擇命令字 */ COM8255=0 x0f ; /* PC7=1 */ for (i=0 ; icon ;i+ ) PA8255= * ram ; /* 固化內容口A鎖存 */ PB8255=eprom % 256 ; /* 2732地址低8位 */ PC8255=eprom /256 ; /* 2732地址高4位 */;單片機C語言應用程序設計 eprom + ; ram + ; COM8255=0 x0e

30、; /* PC7=0 */ d1_ms (50 ) ; COM8255=0 x0f ; /* PC7=1 */ main ( ) program ( 0 x1000,0 x0000,0 x0100 ) ; ;單片機C語言應用程序設計 4.2.2 MCS-51數據采集的數據采集的C言語編程言語編程例例7 ADC0809與與8031接口的數據采集程序舉例。接口的數據采集程序舉例。圖2.4 ADC0809與8031的接口電路;單片機C語言應用程序設計 程序如下: # include # include # define uchar unsigned char # define IN0 XBYTE 0

31、 x7ff8 /* 設置AD0809的通道0地址 */ sbit ad_busy =P33 ; /* 即EOC形狀 */ void ad0809 ( uchar idata *x ) /* 采樣結果放指針中的A/D采集函數 */ uchar i ; uchar xdata *ad_adr ; ad_adr= & IN0 ; for ( i=0 ; i8 ;i+ ) /* 處置8通道 */ *ad_adr=0 ; /* 啟動轉換 */;單片機C語言應用程序設計 i=i ; /* 延時等待EOC變低 */ i=i ; while (ad_busy = =0 ) ; /* 查詢等待轉換終了

32、*/ xi = * ad_adr ; /* 存轉換結果 */ ad_adr + ; /* 下一通道 */ void main ( void ) static uchar idata ad 10 ; ad0809 ( ad ) ; /* 采樣AD0809通道的值 */ ;單片機C語言應用程序設計 例例8 AD574與與8031接口的數據采集程序舉例。接口的數據采集程序舉例。圖2.5 AD574與8031的接口電路;單片機C語言應用程序設計 源程序如下:# include # inlucde # define uint unsigned int # define ADCOM XBYTE 0 xff

33、7c /* 使A0=0 ,R/C=0, CS=0 */# define ADLO XBYTE 0 xff7f /* 使 R/C =1,A0=1, CS=0 */# define ADHI XBYTE 0 xff7d /* 使R/C=1,A0=0,CS =0 */sbit r = P3 7 ;sbit w = P3 6 ;sbit adbusy = P1 0 ;;單片機C語言應用程序設計 uint ad574 ( void ) /* AD574轉換器 */ r = 0 ; /* 產生CE=1 */ w = 0 ; ADCOM = 0 ; /* 啟動轉換 */ while ( adbusy = =

34、1 ) ; /* 等待轉換*/ return ( ( uint )(ADHI4 )+( ADLO &0 x0f ) ); /* 前往12位采樣值*/ main ( ) uint idata result ; result =ad574 ( ) ; /* 啟動AD574進展一次轉換,得轉換結果 */ ;單片機C語言應用程序設計 2.2.3 MCS-51輸出控制的輸出控制的C言語編程言語編程例例9 8031與與DAC0832雙緩沖接口的數據轉換程序舉例。雙緩沖接口的數據轉換程序舉例。圖4.6 DAC 0832的雙緩沖接口電路;單片機C語言應用程序設計 將data1和data2數據同時轉換為

35、模擬量的C51程序如下:# include # include # define INPUTR1 XBYTE 0 x8fff # define INPUTR2 XBYTE 0 xa7ff# define DACR XBYTE 0 x2fff # define uchar unsigned char void dac2b (data1 ,data2 )uchar data1 , data2 ; INPUTR1 = data1 ; /* 送數據到一片0832 */ INPUTR2 = data2 ; /* 送數據到另一片0832 */ DACR= 0 ; /* 啟動兩路D/A 同時轉換 * /;單

36、片機C語言應用程序設計 例例10 8031與與DAC0832單緩沖區(qū)接口的數據轉換舉例。單緩沖區(qū)接口的數據轉換舉例。圖4.7 DAC0832與8031 的單緩沖接口 ;單片機C語言應用程序設計 按片選線確定FFFEH為DAC0832的端口地址。使運轉輸出端輸出一個鋸齒波電壓信號的C51程序如下:# include # include # define DA0832 XBYTE 0 xfffe # define uchar unsigned char # define uint unsigned int void stair (void ) uchar i ; while ( 1 ) for (

37、 i=0 ; i=255 ; i=I+ ) /* 構成鋸齒波輸出值,最大值為255 */ DA0832 = i ; /* D/A轉換輸出 */ ;單片機C語言應用程序設計 例例11 8031與與AD7521接口的數據轉換程序舉例。接口的數據轉換程序舉例。圖4.8 AD7521與8031的接口 ;單片機C語言應用程序設計 使AD7521輸出梯形波的C51程序如下:# include # include # define DA7521L XBYTE0 x7fff # define DA7521H XBYTE0 xbfff # define UP 0 x010# define T 1000# def

38、ine uint unsigned int ;單片機C語言應用程序設計 void dlms ( uint a );void stair(void) uint i ; for ( i=0 ; i=4095 ; i=i+UP ) /* 以階高增量增值,構成梯形波輸出值,最大4095*/ DA7521L= i % 256 ; /* 送低8位數據到第一級緩沖器 */ DA7521H= i /256 ; /* 送高4位數據到高4位緩沖器,同時送低8位到第二級 /* 緩沖轉換 */ dlms ( T ) ; /* 延時 */ ;單片機C語言應用程序設計 4.3 頻率量丈量的頻率量丈量的C言語編程言語編程4

39、.3.1 丈量頻率法丈量頻率法 丈量頻率法的最簡單的接口電路,可將頻率脈沖直丈量頻率法的最簡單的接口電路,可將頻率脈沖直接銜接到接銜接到MCS-51的的T1端,將端,將8031的的T/C0用作定時器,用作定時器,T/C1用作計數器。在用作計數器。在T/C0定時時間里,對頻率脈沖進定時時間里,對頻率脈沖進展計數。展計數。T/C1的計數值便是單位定時時間里的脈沖個的計數值便是單位定時時間里的脈沖個數。數。;單片機C語言應用程序設計 定時輸入脈沖 T圖2.10丈量頻率中的脈沖喪失;單片機C語言應用程序設計 例例12 帶同步控制的頻率丈量。帶同步控制的頻率丈量。圖4.11 帶同步控制的頻率丈量法接口

40、;單片機C語言應用程序設計 控制時,首先P1.0發(fā)一個清零負脈沖,使U1、U2兩個D觸發(fā)器復位,其輸出封鎖與門G1和G2。接著由P1.1發(fā)一個啟動正脈沖,其有效上升沿使U1=1,門G1被開放。之后,被測脈沖上升沿經過G2送T1計數;同時U2輸出的高電平使INT0 =1,定時器0的門控GATE有效,啟動T/C0開場定時。直到定時終了時,從P1.0發(fā)一負脈沖,清零 U2,封鎖G2,停頓T/C1計數,完成一次頻率采樣過程。;單片機C語言應用程序設計 丈量T/C定時時間為500 ms,這樣長的時間定時,先由T/C0定時100 ms,之后軟件5次中斷后的時間即為5100 ms=500 ms。中斷次數的計數值在msn中。 T/C0定時100 ms的計數初值:03B0H。計數器1采用16位計數。設T/C0為高優(yōu)先級,允許計數中斷過程定時中斷,即定時時間到就中止計數。tf為500 ms定時時間到標志。程序如下:;單片機C語言應用程序設計 #include #define uchar unsigned char#define uint unsigned int#define A 5 /*500 ms 的中斷次數*/sbit P1_0=P10;sbit P1_1

溫馨提示

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

評論

0/150

提交評論