![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 七嘴八舌異言堂
(https://www.pcdvd.com.tw/forumdisplay.php?f=12)
- - 救救我的8051吧 用KEIL C寫
(https://www.pcdvd.com.tw/showthread.php?t=647143)
|
|---|
救救我的8051吧 用KEIL C寫
需要請求大家的協助
想了好久 還是不會 電路動作: 當5pin開關全部off時 8051的動作 P0.5為負緣觸發 P0.6一直送ck 當任何依各開關打開 則會以陣列或是查表的方式找到相對映的16bit的data送到P0.7 送的同時P0.5為負緣觸發 P0.6一直送ck 依各CK 就送1BIT的資料 |
引用:
有點忘了51c怎寫了... :ase void data_tx(char *ptr) { while(*ptr !='\0') { P0.7=*ptr; Delay(?); ++ptr; } } void main(void) ( case(sw) 0: 1: data_tx(?); 2: 3: 4: 5: } 不懂你的P0.5負緣觸發是什麼意思....是觸發人還是被觸發? P0.6一直送clk可以考慮用計數中斷去寫.... 我51c還沒寫熟就跳verilog啦... :laugh: verilog一樣是肉腳.... :laugh: |
看不懂
我不知道一筆16bit的資料 要怎麼配合ck送到一隻腳位上 |
引用:
樓主寫的程式應該是做SPI串列傳輸的動作吧! 其實SPI還算簡單,只有4支腳,就你腳位的定義,P0.5是chip select,P0.6是Clock,P0.7是 Data Out,另外還有一支Data In你沒定義,其中chip select是Low動作,沒有要傳資料時是 設為High,當要傳送資料時才設為Low,所以一開始要先設為Low,然後再經由Clock觸發將 Data Out腳資料送出,下面的程式是傳8bit資料,傳送資料的關鍵就在Clock的邊緣觸發, 由下面程式來看是當Clock在0變1的瞬間(正緣觸發)將一個bit送出,那做八次就可送出8bit, 依此類推做16次就是16bit,另外要注意是資料傳送順序是由高位元開始傳,如果有問題可以 去找有內建SPI的MCU的datasheet,應該會有詳細的解說和時序圖. void DataOut(BYTE bByte) { BYTE i; for(i=0;i<8;i++) { P0.6=0; P0.7=bByte&0x80; bByte<<=1; P0.6=1; } P0.7=1; } |
| 所有的時間均為GMT +8。 現在的時間是06:32 AM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2026。