如何使用8051 產生HZ |
尚未結案
|
fushou0214
一般會員 發表:3 回覆:4 積分:1 註冊:2015-08-05 發送簡訊給我 |
|
aki
版主 發表:30 回覆:696 積分:755 註冊:2004-01-15 發送簡訊給我 |
想要出多少 Hz?
低頻就直接用 GPIO out ON delay 一段時間,再 OFF 就好, 高頻輸出要用 PWM, 需要用到 timer 或是 PWM 功能來做! 應該 8051 的書上都有範例. 我有 TI MSP430 & ARM cortex M0 的範例, ===================引 用 fushou0214 文 章=================== 我想寫一套,可以在8051上直接輸出HZ! 有簡單的範例可以參考的嗎? 我是使用C語言寫法,或可以提供意見,謝謝。 |
fushou0214
一般會員 發表:3 回覆:4 積分:1 註冊:2015-08-05 發送簡訊給我 |
|
aki
版主 發表:30 回覆:696 積分:755 註冊:2004-01-15 發送簡訊給我 |
以下是 TI MSP430F2012 的範例,你看看可以改用 8051 來做嗎?
基本的概念是一樣的. //****************************************************************************** // // MSP430F20xx Demo - Software Toggle P1.0 // // test OK! at 2007,08,29 // 2009,09,11 // // Description; Toggle P1.0 by xor'ing P1.0 inside of a software loop. // ACLK = n/a, MCLK = SMCLK = default DCO = 1MHz // // // MSP430F20xx,2012,2013 // ----------------- // /|\| XIN|- // | | | // --|RST XOUT|- // | | // | P1.0|-->LED // | P1.1|-->LED // | | // // M.Buccini / L. Westlund // Texas Instruments, Inc // October 2005 // Built with IAR Embedded Workbench Version: 3.40A or 4.1 on WinXP // & V5.4 on Windows 8. // modify by Sou. // testing summary // 1. i=50000 P1.0=816mS // 2. i=51000 P1.0=840mS // // //****************************************************************************** #include void main(void) { WDTCTL = WDTPW WDTHOLD; /* Stop watchdog timer */ P1DIR |= 0x03; // Set P1.0 & P1.1 to output direction BCSCTL1 = CALBC1_8MHZ; // Set DCO to 8MHz DCOCTL = CALDCO_8MHZ; for (;;) { volatile unsigned int i,j; // volatile to prevent optimization P1OUT ^= 0x03; // Toggle P1.0 & P1.1 using exclusive-OR i = 6000; // SW Delay j = 100; do { i--; for(j=0; j<10; j ); }//end of while loop while (i != 0); }// end of unlimite loop } ===================引 用 fushou0214 文 章=================== 版主,您好, 我是想要輸出0HZ到2khz,有範例可以參考嗎? 我的書上都沒有實際的範例,目前我看到的就是聲音產生也是使用hz |
jxchen
一般會員 發表:5 回覆:13 積分:3 註冊:2007-02-14 發送簡訊給我 |
#include
|
jxchen
一般會員 發表:5 回覆:13 積分:3 註冊:2007-02-14 發送簡訊給我 |
===================引 用 jxchen 文 章=================== 檔案內容有少,請重新參考此版本 #include //reference code sbit PWM = P1^0; void main(void) { EA=0; //Disable Global Interrupt TMOD=0x01 // timer0 mode 1 TL0 = (65536- PWM) & 0xFF; TH0 = ((65536-PWM) & 0xFF00) >> 8; ET0=0; // Disable Timer0 Interrupt TF0=0; // Clear Timer0 Overflow ET0=1; // Enable Timer0 Interrupt TR0=1; // Start Timer0 EA=1; // Enable Global Interrupt while (1); // nothing } void timer0 () interrupt 1 // 1ms = 1 / 1khz (Example) // one period as" high" with "low" combine. { PWM = !PWM; //io invert TL0 = (65536- PWM) & 0xFF; TH0 = ((65536-PWM) & 0xFF00) >> 8; } |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |