|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
keil編譯器發(fā)生了奇怪的問題! |
| 作者:dcknightdc 欄目:單片機(jī) |
出現(xiàn)問題時(shí)的截圖我把它作為附件傳上了來,哪位大蝦對這個(gè)問題比較了解的,麻煩給個(gè)解決辦法和建議! 下面的是要編譯的源程序: #include <reg52.h> #include "ps2_driver.h" //單片機(jī)向PS/2鍵盤發(fā)送數(shù)據(jù)程序代碼如下: void ps2_sentCHAR( unsigned CHAR sentCHAR ) //ps2主設(shè)備向從設(shè)備發(fā)送數(shù)據(jù) { unsigned CHAR sentbit_cnt = 0x00; unsigned CHAR sentCHAR_chk = 0x00; EX0 = 0; //關(guān)外部中斷0 //發(fā)起一個(gè)傳送,發(fā)起始位 PS2_SGN_CLOCK = 0;//將時(shí)鐘線拉低并保持100us delay100us(); PS2_SGN_DATA = 0;//起始位 PS2_SGN_CLOCK = 1;//發(fā)送DATA0-7 for( sentbit_cnt = 0; sentbit_cnt<8;sentbit_cnt++ ) { while(PS2_SGN_CLOCK) _nop_();//等待時(shí)鐘線變?yōu)榈?br> PS2_SGN_DATA = sentCHAR & 0x01;//發(fā)送數(shù)據(jù) if(PS2_SGN_DATA) sentCHAR_chk++;//計(jì)算校驗(yàn) while(!PS2_SGN_CLOCK) _nop_();//等待時(shí)鐘線變高 sentCHAR >>= 1;//待發(fā)送數(shù)據(jù)右移一位 } //發(fā)送校驗(yàn)位 while(PS2_SGN_CLOCK) _nop_();//等待時(shí)鐘線變?yōu)榈?br> SWITCH(sentCHAR_chk) { case 0: case 2: case 4: case 6: PS2_SGN_DATA = 1;break;//奇校驗(yàn) case 1: case 3: case 5: case 7: PS2_SGN_DATA = 0;break;//奇校驗(yàn) default: break; } while(!PS2_SGN_CLOCK) _nop_();//等待時(shí)鐘線變高 while(PS2_SGN_CLOCK) _nop_();//等待時(shí)鐘線變?yōu)榈?br> PS2_SGN_DATA = 1; //發(fā)送停止位 停止位總為1 while(!PS2_SGN_CLOCK) _nop_();//等待時(shí)鐘線變高 while(PS2_SGN_CLOCK) _nop_();//等待時(shí)鐘線變?yōu)榈?br>//接收ACK if(PS2_SGN_DATA) error(); // ACK信號由鍵盤發(fā)出,總為低電平 while(!PS2_SGN_CLOCK) _nop_();//等待時(shí)鐘線變高 EX0 = 1; //開外部中斷0 } //單片機(jī)從PS/2鍵盤接收數(shù)據(jù)程序:外部中斷0設(shè)置為下降沿觸發(fā) void int0() interrupt 0 using 0 { EX0=0;//關(guān)外部中斷0 SWITCH( ps2_revCHAR_cnt ) { case 1: //ps2主設(shè)備向從設(shè)備發(fā)送數(shù)據(jù) case 2: case 3: case 4: case 5: case 6: case 7: case 8: mcu_revCHAR<<=1; if(PS2_SGN_DATA) mcu_revCHAR |= 0x01; ps2_revCHAR_cnt++; break; case 0: ps2_revCHAR_cnt++;break;//開始位, case 9: ps2_revCHAR_cnt++;break;//校驗(yàn)位,可添加校驗(yàn)程序 case 10: _nop_();//停止位 ps2_revCHAR_cnt=0; revCHAR_flag=1;//置接收到數(shù)據(jù)標(biāo)志位 break; default:break; } EX0=1;//開外部中斷0 }
|
| 2樓: | >>參與討論 |
| 作者: net_walker 于 2005/6/12 21:51:00 發(fā)布:
re 建議: 1.卸載重裝試試。 2.模塊化調(diào)試。 |
|
| 3樓: | >>參與討論 |
| 作者: enbed 于 2005/6/13 7:55:00 發(fā)布:
zheyang : //校驗(yàn)位,可添加校驗(yàn)程序 UV3對用這個(gè)的:// 支持不好,換成/**/或用UV2。 偶也遇到過的,不想改,就UV2了。 |
|
| 4樓: | >>參與討論 |
| 作者: hiberhe 于 2005/6/13 11:53:00 發(fā)布:
以前的kei uv3遇到一個(gè)類似的問題 也是跟程序中的注釋有關(guān)的 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |