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

正文內(nèi)容

基于can溫度檢測系統(tǒng)的設(shè)計(jì)適配卡軟件及pc監(jiān)控界面設(shè)計(jì)-資料下載頁

2025-06-27 17:48本頁面
  

【正文】 UART0中斷程序流程圖 圖49是UARTO的中斷服務(wù)程序流程圖。每次接收或發(fā)送完一個字節(jié)的數(shù)據(jù)后,UART0中斷產(chǎn)生,觸發(fā)中斷服務(wù)程序。由于一個數(shù)據(jù)幀包含8個字節(jié)(PC機(jī)向適配卡發(fā)送的數(shù)據(jù)為9個字節(jié)),所以要在UART0中斷服務(wù)程序中判斷一幀數(shù)據(jù)是否發(fā)送、接收完。接收完一幀,控制參數(shù)、數(shù)組下標(biāo)都要更新。 中斷服務(wù)程序中,清中斷標(biāo)志、保存SFRPAGE很重要。圖410 CAN0程序中斷流程圖 圖410是CANO的中斷服務(wù)程序流程圖。在CAN0的中斷服務(wù)程序中,主要完成:接收一幀CAN總線傳來的數(shù)據(jù)、相應(yīng)的狀態(tài)變量TXOK、newupdata值的設(shè)定。所使用的CAN中斷向量表如表411。表 411 CAN中斷向量表中斷源中斷矢量優(yōu)先級中斷標(biāo)志中斷標(biāo)志是否可位尋址中斷標(biāo)志是否硬件清零中斷控制寄存器CAN中斷0X009B19否否ECAN0()E 進(jìn)入CAN0中斷服務(wù)程序后,先保存SFRPAGE,然后讀取CAN0STA狀態(tài)寄存器數(shù)值,判斷是接收中斷還是發(fā)送中斷。判定后,相應(yīng)的標(biāo)志位清零——TxOK和RxOK。 CAN0消息對象配置的是一次收發(fā)8個字節(jié)的數(shù)據(jù),所以一次中斷發(fā)送、接收一幀數(shù)據(jù)。發(fā)送接收完成后,相應(yīng)的控制參數(shù)置位或清零。 結(jié) 論本人由于畢業(yè)設(shè)計(jì)需要,學(xué)習(xí)了VB的一些知識,對VB這款編程語言有些體會。從1991年VB誕生之日起到現(xiàn)在已經(jīng)有七個版本了(),這么高的更新率,不外乎說明兩個問題:程序員對VB的熱衷,微軟對VB的重視。VB的優(yōu)點(diǎn)很突出:開發(fā)出來的軟件體積小,VC++和Delphi還沒寫代碼編譯出來都有幾百KB,而能達(dá)到幾百KB的VB程序功能是相當(dāng)完善了;可視化界面,操作簡單易學(xué)。當(dāng)然VB也有缺點(diǎn):VB在底層功能和指針的支持沒有VC++好,在設(shè)計(jì)過程中,沒有指針支持,使得程序顯得比較笨拙。同學(xué)推薦筆者使用Delphi,由于時間緊,先接觸了VB,所以就堅(jiān)持使用VB開發(fā)了,將來有時間會學(xué)習(xí)下Delphi的。另外,VB隱藏了許多Windows內(nèi)部和底層的知識,VB的許多功能是靠調(diào)用已經(jīng)編輯好的Windows模塊或dll實(shí)現(xiàn)的,VB本身無法編輯這些東西,對底層操作極其不便。運(yùn)行速度較C或其他語言慢。本人使用VB開發(fā)的上位機(jī)監(jiān)控軟件,界面簡介、易于操作,滿足監(jiān)控界面的基本要求。CAN適配卡軟件下載到C8051F040單片機(jī)上,能處理數(shù)據(jù),該系統(tǒng)能夠?qū)Χ鄠€溫度點(diǎn)進(jìn)行檢測與控制,符合畢業(yè)設(shè)計(jì)的設(shè)計(jì)要求。整個畢業(yè)設(shè)計(jì)做下來,本人感覺有很多收獲。在畢業(yè)設(shè)計(jì)中,也有些個人創(chuàng)新的想法。CAN消息對象的配置一般是在程序初始化時進(jìn)行的,配置好后,在程序運(yùn)行中,為了可靠和安全性,一般不改變消息對象的配置。但是如果要對不同的節(jié)點(diǎn)發(fā)送數(shù)據(jù)時,負(fù)責(zé)發(fā)送數(shù)據(jù)的消息對象的ID必須改變,好讓目標(biāo)節(jié)點(diǎn)接收數(shù)據(jù)。通常做法是,當(dāng)要對不同節(jié)點(diǎn)發(fā)送數(shù)據(jù)時,重新初始化消息對象,寫入目標(biāo)節(jié)點(diǎn)的ID,然后發(fā)送。在本畢業(yè)設(shè)計(jì)中,由于適配卡需要向現(xiàn)場兩個節(jié)點(diǎn)發(fā)送數(shù)據(jù),所以就初始化兩個負(fù)責(zé)發(fā)送數(shù)據(jù)的消息對象,每個向特定的節(jié)點(diǎn)發(fā)送信息,這樣就避免了一個消息對象的重復(fù)性初始化。當(dāng)然C8051F040中只包含32個消息對象;而且初始化多個負(fù)責(zé)發(fā)送數(shù)據(jù)的消息對象,一般用在單次傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)大于8個字節(jié)的場合。筆者這樣使用,算靈活運(yùn)用,減少麻煩。 畢業(yè)設(shè)計(jì)做下來,覺的在設(shè)計(jì)中,有些地方還是值得完善和改進(jìn)的。Visual Basic設(shè)計(jì)用戶登錄窗口時,實(shí)際上是采用類似一個txt文檔來保存用戶信息,實(shí)際上這是有安全隱患的,安全的用戶管理系統(tǒng),應(yīng)該是使用數(shù)據(jù)庫來存儲用戶信息的,這樣安全性就很好了。數(shù)據(jù)庫保存,保存期靈活,安全。我設(shè)想將來用數(shù)據(jù)庫實(shí)現(xiàn)用戶信息保存。在界面設(shè)計(jì)領(lǐng)域中,廣泛受到中小企業(yè)使用的是組態(tài)軟件。在組態(tài)概念出現(xiàn)之前,要實(shí)現(xiàn)某一任務(wù),都是通過編寫程序(如使用BASIC,C,FORTRAN等)來實(shí)現(xiàn)的。編寫程序不但工作量大、周期長,而且容易犯錯誤,不能保證工期。組態(tài)軟件的出現(xiàn),解決了這個問題。對于過去需要幾個月的工作,通過組態(tài)幾天就可以完成。本人設(shè)想,可以使用組態(tài)軟件開發(fā)上位機(jī)的監(jiān)控界面。CAN適配卡上的單片機(jī)初始化時,主程序中采用死循環(huán),禁止使用看門狗。這樣的系統(tǒng)雖然設(shè)計(jì)簡單,但實(shí)際使用時,系統(tǒng)的魯棒性不好,在今后的改進(jìn)中可以考慮看門狗的使用。如此這般,不一而足。 致 謝 參 考 文 獻(xiàn)附錄A CAN適配卡部分程序void uart0_ini(){ SFRPAGE = UART0_PAGE。 SADEN0 = 0x00。 SADDR0 = 0x00。 //SADDR0和SADEN0,通信不檢測UART0地址 SSTA0 = 0x00。 //T1時鐘溢出作為RX、TX的波特率 SCON0 = 0x50。 //工作在模式1,為8bit可變波特率通訊 SCON0 amp。= 0xFC。 //將TI0和RI0清零1111 1100 IE|=0x10。 //UART0 中斷允許 CKCON = 0x10。 // T1采用系統(tǒng)時鐘,不分頻 TMOD = 0x20。 // T1為8bit自動重載模式 TCON = 0x40。 // TR1置1,啟動定時器 val=10。 //T1溢出率設(shè)置,溢出率為(T1時鐘頻率) TH1 = ~val+1。 TL1 = TH1。 //波特率約為9600bps }void config (void) { WDTCN = 0x07。 //看門狗配置,禁止看門狗 WDTCN = 0xDE。 WDTCN = 0xAD。 SFRPAGE = CONFIG_PAGE。 XBR0 = 0x04。 // 將UART0 , XBR1 = 0x00。 // XBR2 = 0x40。 // 交叉開關(guān)配置使能 XBR3 = 0x00。 P0MDOUT = 0x03。 // TX0和RX0為推挽模式 P1MDIN = 0xFF。 // P1輸入模式配置 CLKSEL = 0x00。 //晶振配置,采用內(nèi)部晶振8分頻 OSCXCN = 0x00。 OSCICN = 0x84。 //采用內(nèi)部晶振, 8分頻}void clear_msg_objects (void) //將所有消息對象清零{ SFRPAGE = CAN0_PAGE。 CAN0ADR = IF1CMDMSK。 CAN0DATL = 0xFF。 for (i=1。i33。i++) { CAN0ADR = IF1CMDRQST。 CAN0DATL = i。 }}void init_msg_object_RX (uchar MsgNum,uint id){ uint temp。 SFRPAGE = CAN0_PAGE。 CAN0ADR = IF2CMDMSK。 CAN0DAT = 0x00fb。 /WR/RD=1,Mask=1,Arb=1,Control=1,ClrIntPnd=1,TxRqst=0,DataA=1,DataB=1,一次發(fā)送8字節(jié)數(shù)據(jù)*/ CANOADR = IF1MSK1 CAN0DAT = 0x0000。 CAN0DAT = 0x8004。//MSGOBJMR1 MASK REGISTER:0X8004 0000// CAN0ADR = IF2ARB1。 CAN0DAT = 0x0000。 /*IF2 Arbitration Registers1 =0x0000,即ID150=0*/ temp=id2。//標(biāo)準(zhǔn)id為ID28ID18,所以要左移2位 tempamp。=0x1fff。 temp|=0x8000。 CAN0DAT = temp。 /*IF2 Arbitration Registers2=100(id)00b MsgVal=1,Xtd=0,為標(biāo)準(zhǔn)模式,擴(kuò)展ID無效,Dir=0,為接收*/ //CAN0ADR自動增加 CAN0DAT = 0x1488。 /*IF2 Message Control Registers=0x1488** NewDat=0,MsgLst=0,IntPnd=0,UMask=1,TxIE=0,RxIE=1,接收中斷使能。RmtEn=0,TxRqst=0 EoB=1,DLC30=1000,即數(shù)據(jù)長度為8*/ CAN0ADR = IF2CMDRQST。 CAN0DATL = MsgNum。 /*IF2 Command Request Registers=MsgNum,將以上配置寫入MsgNum號消息*/}void init_msg_object_TX (uchar MsgNum,uint id){ uint temp。 SFRPAGE = CAN0_PAGE。 CAN0ADR = IF1CMDMSK。 //指向IF1 Command Mask Registers CAN0DAT = 0x00b3。 /* IF1 Command Mask Registers =0x00b3 WR/RD=1,Mask=0,Arb=1,Control=1,ClrIntPnd=0,TxRqst=0,DataA=1,DataB=1,一次發(fā)送8字節(jié)數(shù)據(jù)*/ CAN0ADR = IF1ARB1。 CAN0DAT = 0x0000。 /*IF1 Arbitration Registers1 =0x0000,即ID150=0*/ temp=id2。//標(biāo)準(zhǔn)id為ID28ID18,所以要左移2位 tempamp。=0x1fff。 temp|=0xa000。 CAN0DAT = temp。 //地址自增,指向IF1 Arbitration Registers2 /*IF1 Arbitration Registers2=101(id)00b MsgVal=1,Xtd=0,為標(biāo)準(zhǔn)模式,擴(kuò)展ID無效,Dir=1,為發(fā)送*/ CAN0DAT = 0x0088。 /*IF1 Message Control Registers=0x0088** NewDat=0,MsgLst=0,IntPnd=0,UMask=0,TxIE=0,RxIE=0,RmtEn=0,TxRqst=0 EoB=1,DLC30=1000,即數(shù)據(jù)長度為8*/ CAN0ADR = IF1CMDRQST。 CAN0DAT = MsgNum。 /*IF1 Command Request Registers=MsgNum,將以上配置寫入MsgNum號消息*/}void canini() { clear_msg_objects()。 init_msg_object_RX (MSGOBJMR1,ID1)。//初始化消息對象MSGOBJMR1為接收 init_msg_object_TX (MSGOBJMT1,ID2)。//初始化消息對象MSGOBJMT1為發(fā)送 init_msg_object_TX (MSGOBJMT2,ID3)。//初始化消息對象MSGOBJMT2為發(fā)送 EIE2 |= 0x20。 //允許CAN控制器中斷 EA = 1。 //中斷允許位 SFRPAGE = CAN0_PAGE。 CAN0CN=0X41。 CAN0ADR=BITREG。 CAN0DAT=0X70C0。 //調(diào)波特率 start_CAN()。}void transmit (char MsgNum){ uchar num。 SFRPAGE = CAN0_PAGE。 CAN0ADR = IF1CMDMSK。 CAN0DAT = 0x0087。 /* IF1 Command Mask Registers =0x0087 WR/RD=1,Mask=0,Arb=0,Control=0,ClrIntPnd=0,TxRqst=1,DataA=1,DataB=1,一次發(fā)送4字節(jié)數(shù)據(jù)*/ CAN0ADR = IF1DATA1。 for(num=0。num8。num++){ CAN0DATL=sdata[num]。 num++。 CAN0DATH=sdata[num]。 } CAN0ADR = IF1CMDRQST。 CAN0DATL = MsgNum。 }void receive (uchar MsgNum){ SFRPAGE = CAN0_PAGE。 CAN0ADR = IF2CMDMSK。 CAN0DAT = 0x000f。 /WR/RD=0,Mask=0,Arb=0,Control=0,ClrIntPnd=1,NewDat=1,DataA=1,DataB=1,一次接收8字節(jié)數(shù)據(jù)*/ CAN0ADR = IF2CMDRQST。 CAN0DATL = MsgNum。 CAN0ADR = IF2DATA1。 for(i=0。i4。i++) { rdata[i]=CAN0DATL。//接收數(shù)據(jù), rdata[i+1]=CAN0DATH。// } newupdata=1。 }void main(){ config()。 uart0_ini()。 canini()。//控制變量初始化
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1