全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2242
推到 Plurk!
推到 Facebook!

如何使用8051 產生HZ

尚未結案
fushou0214
一般會員


發表:3
回覆:4
積分:1
註冊:2015-08-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-09-10 08:41:24 IP:223.136.xxx.xxx 訂閱
我想寫一套,可以在8051上直接輸出HZ!

有簡單的範例可以參考的嗎? 我是使用C語言寫法,或可以提供意見,謝謝。
aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-09-11 08:14:57 IP:1.200.xxx.xxx 訂閱
想要出多少 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-09-11 09:06:01 IP:223.136.xxx.xxx 訂閱
版主,您好,

我是想要輸出0HZ到2khz,有範例可以參考嗎?

我的書上都沒有實際的範例,目前我看到的就是聲音產生也是使用hz
aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-09-14 15:36:36 IP:1.200.xxx.xxx 訂閱
以下是 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-11-13 23:24:44 IP:61.62.xxx.xxx 訂閱
#include  //reference code sbit PWM = P1^0; void main(void) { EA=0; //Disable Global Interrupt TMOD=0x01 // timer0 mode 1 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; }
jxchen
一般會員


發表:5
回覆:13
積分:3
註冊:2007-02-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-11-14 10:45:11 IP:61.64.xxx.xxx 訂閱

===================引 用 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;
}
系統時間:2024-11-21 21:57:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!