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

正文內(nèi)容

基于usb接口的編程器的設(shè)計(jì)畢業(yè)設(shè)計(jì)說(shuō)明書-資料下載頁(yè)

2025-07-01 09:35本頁(yè)面

【導(dǎo)讀】USB是連接外部設(shè)備和主控制器的一個(gè)串行總線標(biāo)準(zhǔn)。USB是由AjayBhatt在因特爾公司工作時(shí)開發(fā)的,其開發(fā)USB的目的是為了取代各種各樣的串行和并行端口。USB有一個(gè)顯著優(yōu)點(diǎn)就是支持熱插拔,也就是說(shuō)在開機(jī)的情況下,你也可以安全地連接或斷開USB設(shè)備,真正達(dá)到真正的即插即用。隨著電子的快速發(fā)展,單片機(jī)機(jī)得到了廣泛地應(yīng)用,而單片機(jī)開發(fā)產(chǎn)品離不開編程器。傳統(tǒng)的編程器都是基于并口開發(fā),在筆記本中根本無(wú)法使用,因而開發(fā)基于USB接口的編程器具有非常重要的意義。USB型編程器具有體積小巧、功耗低、可靠性高、通用性強(qiáng)、編程速度快等特點(diǎn);另一方面,USB具有自身供電的能力,不必外接電源。本課題實(shí)現(xiàn)了基于USB接口的AT89S5X單片機(jī)編程器制作。文中重點(diǎn)介紹了編程器硬件設(shè)計(jì)、DC-DC升壓電路、USB轉(zhuǎn)串口模塊設(shè)計(jì)、單片機(jī)程序設(shè)計(jì)、上位機(jī)的軟件設(shè)計(jì)。

  

【正文】 附 錄附錄I 下位機(jī)調(diào)試程序/*********************************頭文件開始*******************************/includeinclude Typedef unsigned char BYTE。Typedef bit BOOL。unsigned char ComBuf[17]。Unsigned int nAddress, nTimeOut。sbit P3_2=P3^2。//RSTsbit P3_3=P3^3。//PROG/ALEsbit P3_4=P3^4。//sbit P3_5=P3^5。//CHOOSE 5/12Vsbit P3_6=P3^6。sbit P3_7=P3^7。sbit P2_6=P2^6。sbit P2_7=P2^7。/********************************函數(shù)聲明**********************************/void InitPro00()。 /* 編程前的準(zhǔn)備工作 */void ProOver00()。 /* 編程結(jié)束后的工作,設(shè)置合適的引腳電平 */void Erase00()。 /* 擦除器件 */void Delay_us(unsigned char nUs)。 /* 微秒級(jí)延時(shí)255us */void Delay_ms(unsigned int nMs)。 /* 豪秒級(jí)的延時(shí)65535ms */void SetVpp5V()。 /* 設(shè)置Vpp為5v */void SetVpp12V()。 /* 設(shè)置Vpp為12v */void Delay_ns()。 /* 延時(shí)1個(gè)機(jī)器周期 */void ReadSign00()。 /* 讀特征字 */BYTE Read00()。 /* 從器件讀一個(gè)字節(jié) */BOOL Write01(BYTE Data)。 /* 向器件寫一個(gè)字節(jié) */void Lock00()。 /* 寫鎖定位 */void init_serial( void )。 /* 串口通信初始設(shè)定 */BOOL WaitComm()。 /* 等待上位機(jī)的命令,18字節(jié) */BOOL WaitData()。 /* 寫器件時(shí)等待上位機(jī)數(shù)據(jù),18字節(jié),有超時(shí)限制 */ void SendData()。 /* 發(fā)送數(shù)據(jù)或回應(yīng)操作完成,18字節(jié) */void CPUstop()。 /* CPU停止運(yùn)行 */void RstPro()。 /* 編程器復(fù)位 */void ReadSign()。 /* 讀特征字 */void Erase()。 /* 擦除器件 */void Write()。 /* 寫器件 */void Read()。 /* 讀器件 */void Lock()。 /* 寫鎖定位 */void readdata()。 /* 讀代碼 */void write16()。 /* 寫代碼 *//**********************************主函數(shù)**********************************/void main(void){ init_serial()。 /* 初始化串口 */ SetVpp5V()。 /* 先初始化Vpp為5v */ Delay_ms(1000)。 /* 延時(shí)1S后編程器自舉 */ while(1) { if(!WaitComm()) /* 如果超時(shí),通訊出錯(cuò) */ { Delay_ms(500)。 ComBuf[0]=0。 /*讓編程器復(fù)位,使編程器就緒 */ } switch(ComBuf[0]) { case 0: RstPro()。 break。 case 1:ReadSign()。 break。 case 2: Erase()。 break。 case 3: write16()。 break。 case 4: readdata()。 break。 case 5: Lock()。 break。 case 6: SendData()。 break。 case 7: readdata()。 break。 case 8: reset()。 break。 case 9: CPUstop()。 break。 default:break。 } }}/***************************************************************************** 函數(shù)名稱 readdata** 函數(shù)功能 讀取單片機(jī)ROM區(qū)的一個(gè)數(shù)據(jù)** 入口參數(shù) 無(wú)** 出口參數(shù) MCU程序代碼值***************************************************************************/void readdata(){ int i。 SendData()。 nAddress=0x0000。 while(1) { if(WaitData()) { if(ComBuf[0]==12) /* ComBuf[0]==13表示讀結(jié)束 */ { break。 } else if(ComBuf[0]==0x13) /* 0x13表示重發(fā) */ { nAddress=nAddress0x0010。 } for(i=1。i=16。i++) { ComBuf[i]=Read00()。 nAddress++。 Delay_ms(100)。 } ComBuf[0]=15。 /*向上位機(jī)發(fā)送讀出的數(shù)據(jù)塊 */ SendData()。 } else { break。 } } ProOver00()。 ComBuf[0]=0。 /*通知上位機(jī)編程器進(jìn)入就緒狀態(tài) */ SendData()。}/***************************************************************************** 函數(shù)名稱 RstPro** 函數(shù)功能 單片機(jī)復(fù)位函數(shù)** 入口參數(shù) 無(wú)** 出口參數(shù) 無(wú)***************************************************************************/void RstPro(){ ProOver00()。 /* 直接編程結(jié)束 */}/***************************************************************************** 函數(shù)名稱 ReadSign** 函數(shù)功能 讀特征字** 入口參數(shù) 無(wú)** 出口參數(shù) 無(wú)***************************************************************************/void ReadSign(){ ReadSign00()。 SendData()。}/***************************************************************************** 函數(shù)名稱 Erase** 函數(shù)功能 擦除器件** 入口參數(shù) 無(wú)** 出口參數(shù) 若成功,上位機(jī)接收到第一位的數(shù)據(jù)是數(shù)據(jù)是2,否則接收不到的數(shù)據(jù)***************************************************************************/void Erase(){ Erase00()。 Delay_ms(1000)。 SendData()。}/***************************************************************************** 函數(shù)名稱 write16** 函數(shù)功能 往單片機(jī)寫HEX數(shù)據(jù)** 入口參數(shù) 無(wú)** 出口參數(shù) 若成功,上位機(jī)接收的數(shù)據(jù)是14,否則退出程序***************************************************************************/void write16(){ BYTE i。 nAddress=0x0000。 Write01(ComBuf[0])。 Delay_ms(100)。 SendData()。 while(1) { if(WaitData()) { if(ComBuf[0]==11) { for(i=1。i17。i++) { if(!Write01(ComBuf[i])) { ProOver00()。 /* 出錯(cuò)了就結(jié)束編程 */ ComBuf[0]=0x10。 SendData()。 return。 } nAddress++。 } ComBuf[1]=((BYTE*)(amp。nAddress))[1]。 /* 低地址 */ ComBuf[2]=((BYTE*)(amp。nAddress))[0]。 /* 高地址 */ ComBuf[0]=3。 SendData()。 } else if(ComBuf[0]==14) { for(i=1。i17。i++) { if(!Write01(ComBuf[i])) { ProOver00()。 /*出錯(cuò)了就結(jié)束編程 */ ComBuf[0]=0x10。 SendData()。 return。 } nAddress++。 } break。 } else { ProOver00()。 return。 } } else { ProOver00()。 return。 } } ProOver00()。 Delay_ms(50)。 /* 延時(shí)等待上位機(jī)寫線程結(jié)束 */ ComBuf[0]=14。 /*通知上位機(jī)編程器進(jìn)入就緒狀態(tài) */ SendData()。}/***************************************************************************** 函數(shù)名稱 Lock** 函數(shù)功能 寫鎖定位** 入口參數(shù) 無(wú)** 出口參數(shù) 若成功,上位機(jī)接收到第一位的數(shù)據(jù)是數(shù)據(jù)是5,否則接收不到的數(shù)據(jù)***************************************************************************/void Lock(){ Lock00()。 SendData()。}/***********************************************
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1