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

正文內(nèi)容

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

2025-07-22 13:45 本頁面
 

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