close
html模版



立即點擊


標題

單晶片 C語言程式


問題


我使用16F877A單晶片...想問一段程式是C語言程式...再一個while迴圈裡面...{high_d(0x11)high_d(0x22)high_d(0x44)high_d(0x88)delay_sm(10)}這是控制步進馬達測試讓他轉動而已...程式燒入使用D接腳...只有D3D7這兩支接腳會有5V輸出...1.想問程式d(0x11)這0x11是什麼意思...跟0x220x440x88是位址意思還是16進位的數值...顯示更多我使用16F877A單晶片...想問一段程式是C語言程式...再一個while迴圈裡面...{high_d(0x11)high_d(0x22)high_d(0x44)high_d(0x88)delay_sm(10)}這是控制步進馬達測試讓他轉動而已...程式燒入使用D接腳...只有D3D7這兩支接腳會有5V輸出...1.想問程式d(0x11)這0x11是什麼意思...跟0x220x440x88是位址意思還是16進位的數值程式我非常的不了解我目前只是要測試電路方面有沒有錯誤...跟步進馬達測試會轉動而已...我配合2803A控制步進馬達12V6線4相的2線接12V4線接2803A因為只有一之接腳有輸出...D0~D3只有D3有5V這是程式有問題還是電路方面有錯物馬達只會搭搭震動而已...更新:這是所有程式...我現在步進馬達也是卡在只會震動都不會轉動...老師說delay_ms(10)改久一點老師只說這樣我不太懂...我就改成delay_ms(50)(100)(200)(500)(1000)改成4種都一樣搭搭震動而已...您的意思是每一個都加上一個delay嗎更新2:voidmain(){setup_adc_ports(NO_ANALOGS);setup_adc(ADC_OFF);setup_psp(PSP_DISABLED);setup_spi(FALSE);setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);setup_timer_1(T1_DISABLED);setup_timer_2(T2_DISABLED,0,1);setup_ccp1(CCP_OFF);setup_ccp2(CCP_OFF);更新3:setup_comparator(NC_NC_NC_NC);setup_vref(FALSE);set_tris_D(0x00);while(1){output_d(0x11);output_d(0x22);output_d(0x44);output_d(0x88);delay_ms(10);}}更新4:setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);是INT的...順便問步進馬達的問題...電源兩條都是接正電沒錯吧...4條線白藍紅黃...這是接頭上的順序...可是我看馬達內部...一組正電給的是白紅一組正電給的是藍黃紅藍黃白無無這是他的排序更新5:......紅....藍.黃..............白......無....無它是這樣轉一圈的白藍紅黃就是這個順序嗎...還是它是白紅藍黃一組一組的更新6:另外兩條是土棕色的...廠牌上面沒寫只有寫步進馬達跟電壓安培而以....更新7:東元東元東元只有這些...


最佳解答


我知道你對程式是非常不了解,因為你資料沒給足…… 雖然我大概知道high_d是什麼……但你的確沒說明high_d是什麼東西 { high_d(0x11) high_d(0x22) high_d(0x44) high_d(0x88) delay_sm(10) } 0x22是指16進位的22,如果轉成2進位就是:0010 0010 它是對應到你的輸出接腳: D7 D6 D5 D4 D3 D2 D1 D0 0 0 1 0 0 0 1 0 也就是說,你所給的這段程式會做下面的動作: 一開始,D0輸出5V 接著,D1輸出5V 再來,D2輸出5V 最後,D3輸出5V 至於為什麼你只量到D3有5V,我想是delay_sm所造成的(點點點,雖然我覺得如果是叫delay_ms會比較符合它的功能,不過我尊重你……) 我猜這個delay_sm是時間延遲的副程式,因為單晶片速度很快,你不做時間的延遲的話,它在第一行指令D0輸出5V以後,會在肉眼絕對看不到的瞬間就接著執行下一行指令了,所以你根本看不見D0~D2的5V電壓,步進馬達的轉動根本跟不上這種速度(因為馬達的轉動是機械動作,是無法跟上電的動作的)。 你會看得見D3的5V就是因為你在D3輸出5V後的下一行指令有加delay_sm這個時間延遲。 你在每一個high_d下面都加一個delay_sm試試,應該會改善目前的問題。 2010-08-16 23:06:09 補充: while(1) { output_d(0x11); delay_ms(10); output_d(0x22); delay_ms(10); output_d(0x44); delay_ms(10); output_d(0x88); delay_ms(10); } delay_ms裡面不一定要10,你把數字設愈大它就延遲愈久,馬達就會轉愈慢 如果馬達一直震而不會轉,就有可能是設10太小,時間間隔太短,導致馬達的轉動跟不上電壓的變化。 當然也有可能是激磁的順序錯了……不過應該不太可能啦。 2010-08-16 23:06:14 補充: 還有,你要注意delay_ms這個副程式裡面,宣告變數是用int還是用char,如果是用char的話,那就只有8個bit的大小,也就是說括號裡面最大只有255(unsigned char)或是-128~+127(char)。而int的話就是65535(unsigned int)或是-32768~32767(int)。 2010-08-17 08:36:40 補充: 你步進馬達是哪個廠牌的? 還有另外兩條線的顏色是什麼?


其他答案





以上文章來自奇摩知識家,如有侵犯請留言告知


https://tw.answers.yahoo.com/question/index?qid=20100813000010KK08376

263EE75ACB693161
arrow
arrow

    w72xu80d 發表在 痞客邦 留言(0) 人氣()