freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于單片機c51智能車(編輯修改稿)

2025-07-22 13:45 本頁面
 

【文章內(nèi)容簡介】 arget ‘Target 1’”。點擊“output”,選擇其中的“Create HEX File”,如圖313所示,點擊確定關(guān)閉設置窗口。然后點擊Keil uVision IDE 快捷工具欄中的,Keil的C編譯器開始根據(jù)要生成的目標文件類型對目標工程項目中的C語言源文件進行編譯。編譯過程中,可以觀察到源文件中有沒有錯誤產(chǎn)生,如果沒有錯誤產(chǎn)生,在IDE主窗口的下面出現(xiàn)如圖312提示信息,表明已成功生成了可執(zhí)行文件,并存儲在C語言源程序存儲的目錄中。圖312 編譯過程的輸出提示信息圖313 設置目標工程的編譯輸出文件類型程序編譯正確后就要下載到單片機中。點擊ISP下載軟件圖標,打開ISP下載軟件窗口如圖114所示,并將通信參數(shù)設置成圖中所示的參數(shù)。第一個為接口類型選擇窗口,該窗口的下拉列表中提供了許多接口類型:串口COM1~COM1并口LPT1~LPT3以及USB接口等。這里將使用得是并口LPT1。第二個為下載速度選擇窗口,該窗口內(nèi)容與接口類型緊密相連。不同的接口,該窗口就提供不同內(nèi)容的下載速度。像這里選擇LPT1,則提供了五種下載速度:TURBO 模式、FAST模式、NORMAL模式、SLOW模式和TURBO SLOW模式。在這五種模式下,程序下載速度依次減小。這里所使用的是第一個模式TURBO模式,下載速度最快。第三個為單片機型號選擇窗口。點擊“Flash”,選擇要下載的可執(zhí)行HEX文件——,選擇后點擊編程開始下載。如果下載成功,則下面顯示“完成次數(shù):x次”,否則顯示“失敗次數(shù):x次”。如果芯片是第二次下載程序,需要先選中“擦除”復選框。圖314 ISP軟件下載窗口串口通訊UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)器)是一種能夠把二進制數(shù)據(jù)按位(bit)傳送的通信方式。單片機AT89S52 擁有1個串行通信接口。該串口可在很寬頻率范圍內(nèi)以多種模式工作,其主要功能如下:在輸出數(shù)據(jù)時,把數(shù)據(jù)進行并串轉(zhuǎn)換,即單片機將8位并行數(shù)據(jù)送到串口輸出;在輸入數(shù)據(jù)時,把數(shù)據(jù)進行串并轉(zhuǎn)換,即從串口讀入外部串行數(shù)據(jù)并將其轉(zhuǎn)換為8位并行數(shù)據(jù)送到單片機。[16]單片機AT89S52大部分端口都有第2功能,串口就用到了端口的第2功能。(RXD,第10號引腳)用來串口接收,(TXD,第11號引腳)用來串口發(fā)送。AT89S52串口支持雙全工模式(同時收發(fā)),并具有接收緩沖功能,即在接收第2個字符時,將先前接收到的第1個字符保存在緩沖區(qū)中,只要CPU在第2個字符接收完成之前讀取了第1個字符,數(shù)據(jù)就不會丟失。AT89S52提供了兩個特殊功能寄存器SBUF和SCON供軟件訪問和控制串口。串口緩沖寄存器SBUF實際上是2個寄存器。寫SBUF的操作把待發(fā)送的數(shù)據(jù)送入,讀SBUF的操作把接收到的數(shù)據(jù)取出。[17]兩個操作分別對應于兩個不同的寄存器,見圖315。圖315 AT89S52串口結(jié)構(gòu)簡串口控制寄存器SCON 包含串口的狀態(tài)位和控制位,可進行位操作??刂莆粵Q定串口的工作模式,狀態(tài)位代表數(shù)據(jù)發(fā)送和接收結(jié)束后的狀態(tài)。可用軟件來查詢狀態(tài)位,也可編程使其觸發(fā)中斷。[18]串口的工作頻率,即波特率,可以是固定的,也可以是變化的。如果使用可變的波特率,波特率的時鐘信號由定時器1提供,而且必須對其作相應的編程。波特率是一個衡量通信速度的參數(shù)。它表示每秒鐘傳送的bit的個數(shù)。例如波特率9600表示每秒鐘發(fā)送9600個bit。[19]我使用的是SCON模式1下的8位UART串口通信機制,如表31所示。表31串口工作模式選擇SM0SM1模式描述波特率000移位寄存器1/12fosc0118位UART可變(由定時器1決定)1029位UART1/64(1/32)fosc1139位UART可變(由定時器1決定)在SCON模式1下,波特率按如下公式計算: 波特率=(2SMOD/32)*(fosc/12)*[1/(2K初值)] (31)在SCON模式1下,K=8。SMOD 是電源控制寄存器PCON 的第7 位——波特率倍增位。初值是指定時器/計數(shù)器初值的計算,即定時/計數(shù)器是在計數(shù)初值的基礎上加法記數(shù)的,假設Tn(TLn和THn)中寫入的值為TC,在該模式下最大計數(shù)值為2n,程序運行的計數(shù)值為CCTC=2nCC每個定時/計數(shù)器都有一個16位的寄存器Tn(n=0或1)來控制計數(shù)長度,由高8位THn和低8位TLn置初值。定時/計數(shù)器有四種工作模式。模式0:定時/計數(shù)器按13位自加1計數(shù)器工作。這13位由TH的全部8位和TL中的低5位組成,TL中的高3位沒有用到。模式1:定時/計數(shù)器按16位自加1計數(shù)器工作。模式2:定時/計數(shù)器被拆成一個8位寄存器TH和一個8位計數(shù)器TL,以便實現(xiàn)自動重載。這種模式使用起來非常方便,一旦設置好TMOD和THn,定時器就可以按設定好的周期溢出。模式3:TH0和TL0均作為兩個獨立的8位計數(shù)器工作。定時器1在模式3下不工作。[20]。模式2最大計數(shù)值為256us(28),滿足要求,因此用模式2來顯示LED燈閃爍功能。利用公式計算得出TC=256200=59,換成十六進制為TC=0x38。本設計是在SCON模式1方式下和定時器在工作模式2下進行通訊, 的頭文件,以便智能車控制程序可以方便地調(diào)用。:include include define XTAL 11059200define baudrate 9600define OLEN 8 //串行發(fā)送緩沖區(qū)大小unsigned char ostart。 //發(fā)送緩沖區(qū)起始索引unsigned char oend。 //發(fā)送緩沖區(qū)結(jié)束索引char idata outbuf[OLEN]。 //發(fā)送緩沖區(qū)存儲數(shù)組define ILEN 8 //串行接收緩沖區(qū)大小unsigned char istart。 //接收緩沖區(qū)起始索引unsigned char iend。 //接收緩沖區(qū)結(jié)束索引char idata inbuf[ILEN]。 //接收緩沖存儲數(shù)組bit bdata sendfull。 //發(fā)送緩沖區(qū)滿標志bit bdata sendactive。 //發(fā)送有效標志/*串行中斷服務程序*/static void _isr(void) interrupt 4 using 1 //串口中斷{ //接收數(shù)據(jù)中斷 char c。 if(RI) //接收中斷 { c=SBUF。 //讀字符 RI=0。 //清接收中斷請求標志 if(istart+ILEN!=iend) { inbuf[iend++amp。(ILEN1)]=c。 //緩沖區(qū)接收數(shù)據(jù) } } //發(fā)送數(shù)據(jù)中斷 if(TI) { TI=0。 //清發(fā)送中斷標志 if(ostart!=oend) { SBUF=outbuf[ostart++amp。(OLEN1)]。//向發(fā)送緩沖區(qū)傳送字符 sendfull=0。 //設置緩沖區(qū)滿標志位 } else { sendactive=0。 //設置發(fā)送無效 } }} //PUTBUF: 寫字符到SBUF或發(fā)送緩沖區(qū)void putbuf(char c){ if(!sendfull) //如果緩沖區(qū)不滿就發(fā)送 { if(!sendactive) { sendactive=1。 //直接發(fā)送一個字符 SBUF=c。 //寫到SBUF啟動緩沖區(qū) } else { ES=0。 //暫時串行口關(guān)閉中斷 outbuf[oend++amp。(OLEN1)]=c。 //向發(fā)送緩沖區(qū)傳送字符 if(((oend^ostart)amp。(OLEN1))==0) { sendfull=1。} //設置緩沖區(qū)滿標志 ES=1。 //打開串行口中斷 } }}//putchar:中斷控制putchar函數(shù)//替換標準庫函數(shù)putchar程序//printf函數(shù)使用putchar輸出一個字符char putchar (char c){ if (c==39。\n39。) //增加新的行 { while(sendfull)。 //等待發(fā)送緩沖區(qū)空 putbuf(0x0D)。 //對新行在LF前發(fā)送CR } while(sendfull)。 putbuf(c)。 return(c)。}//_getkey:中斷控制_getkey函數(shù)//替換標準庫函數(shù)_getkey程序//getchar和gets函數(shù)使用_getkeychar _getkey(void){ char c。 while(iend==istart) //判斷接收緩沖區(qū)起始索引是否等于接收緩沖區(qū)結(jié)束索引 {。} ES=0。 c=inbuf[istart++amp。(ILEN1)]。 ES=1。 return(c)。}/* 初始化串行口和UART波特率函數(shù)*/void _initialize(void){ istart=0。 iend=0。 ostart=0。 oend=0。 sendactive=0。 sendfull=0。 TMOD |=0x20。 //設置定時器T/C1工作在方式2,定時1工作于自動重載模式 SCON=0x50。 //設置串行口工作方式1:SCON格式 |M0|M1|M2|REN|TB8|RB8|TI|RI TH1=0xfd。 //波特率9600 TL1=0xfd。 TR1=1。 //啟動定時器 ES=1。 //開串行口中斷} void uart_Init(){ _initialize()。 EA=1。 //CPU開總中斷} 是這樣工作的:define XTAL 11059200define baudrate 9600 及串口使用的波特率為9600。define OLEN 8define ILEN 8輸出和輸入的位數(shù)均是8位。AT89S52內(nèi)部存儲器由片上ROM和片上RAM組成。片上RAM空間由各種用途的存儲器空間組成,包括通用RAM、可位尋址RAM(BDATA區(qū))、寄存器組以及特殊功能寄存器(SFR)。另外,AT89S52有附加的128字節(jié)的內(nèi)部RAM,稱為IDAT 區(qū),地址與SFR是重疊的。這個空間通常用于存放使用頻繁的數(shù)據(jù)。如:char idata outbuf[OLEN]。 //發(fā)送緩沖區(qū)存儲數(shù)組char idata inbuf[ILEN]。 //接收緩沖區(qū)存儲數(shù)組BDATA區(qū)允許軟件以“位”為單位訪問存儲器,這是一項很有用的功能,僅以一條指令就可實現(xiàn)對位進行置位、清除、與、或等操作,簡化了設計。bit bdata sendfull。 //發(fā)送緩沖區(qū)滿標志bit bdata sendactive。 //發(fā)送有效標志函數(shù) void _initialize(void)對串口進行初始化并設置波特率9600,串口將工作在模式1下;函數(shù)void uart_Init( )調(diào)用_initialize( )并打開了總中斷。使用函數(shù)void putbuf(char c)寫字符到SBUF或發(fā)送緩沖區(qū);函數(shù)char _getkey(void)從AT89S52 的串口中讀入一個字符,然后等待字符輸入;而char putchar(char c)則是通過調(diào)用putbuf( )輸出字符。putchar( )只能輸出一個字符,而這里用到的printf 則是通過調(diào)用putchar( )可輸出字符串。函數(shù)static void _is
點擊復制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1