線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:812
推到 Plurk!
推到 Facebook!

C8051F 計時器問題

尚未結案
a750707123
一般會員


發表:1
回覆:0
積分:0
註冊:2013-05-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-05-07 07:13:50 IP:140.116.xxx.xxx 訂閱
 我想撰寫一段類似碼錶功能的C8051F330 CODE
但目前尚未知道他的port腳如何定義
EX:我希望他的P0.0可以當作開始、停止用

以下是我目前所寫
reset後可以計時,但是我想宣告一隻腳為做為開始與暫停用,還不知道怎麼寫
#include "C8051f330.h"
#include "HC164.h"
/*
================================================================================
----------------------------Internal static variables---------------------------
================================================================================
*/
static volatile unsigned char Counter_ms = 0;
static code Charecter[10] = { 0xC0, 0xf9, 0xA4, 0xB0, 0x99, 0x92, 0X82, 0xF8, 0x80, 0x90};
unsigned char DisplayValue[4] = {0, 0, 0, 0};
void HC138_Sel( unsigned char x )
{
x &= 0x07;
P1MDOUT |= ( 1<<2 ) | ( 1<<3 ) | ( 1<<4 );
P1 |= ( 1<<2 ) | ( 1<<3 ) | ( 1<<4 );
P1 &= ( ( x<<2 ) | 0xE3 );
}
/*
================================================================================
* Name : Timer3Init( )
* Description : Initialize timer3, 1ms overflow
* Input : None
* Output : None
* Note : None
================================================================================
*/
static void Timer3Init( void )
{
TMR3RLH = 0xf9;
TMR3RLL = 0x66;
TMR3H = 0xf9;
TMR3L = 0x66;
TMR3CN = 0x04;
EIE1 |= ( 1<<7 );
}
/*
================================================================================
* Name : Timer3_ISR( )
* Description : Interrupt service routine for timer3
* Input : None
* Output : None
* Note : None
================================================================================
*/
static unsigned char Disbit = 0x0;
static Timer3_ISR( void ) interrupt 14
{
TMR3CN &= ~( 1<<7 );
Counter_ms ;
if( Disbit > 4 )
{
Disbit = 1;
}
HC138_Sel( 0x07 );
HC164_Clear( );
HC164_Output( Charecter[ DisplayValue[Disbit - 1] ] );
HC138_Sel( Disbit );
}
/*
================================================================================
* Name : Delay10Ms( )
* Description : Delay for some times
* Input : None
* Output : None
* Note : None
================================================================================
*/
static void DelayMs( unsigned char dly )
{
while( dly-- )
{
Counter_ms = 0;
while( Counter_ms == 0 );
}
}
/*
================================================================================
* Name : ClockInit( )
* Description : Initialize the system clock
* Input : None
* Output : None
* Note : None
================================================================================
*/
static void ClockInit( void )
{
OSCICL = 45;
OSCICN |= ( 1<<7 ); //Enable internal H-F
while( !( OSCICN & ( 1<<6 ) ) ); //Wait for stable
OSCICN |= ( 3<<0 ); //0 prescaler
CLKSEL = 0; //system clocm : internal H-F
}
/*
================================================================================
* Name : GPIOInit( )
* Description : Initialize the GPIOs
* Input : None
* Output : None
* Note : None
================================================================================
*/
static void GPIOInit( void )
{
// P0.0 - SCK (SPI0), Open-Drain, Digital
// P0.1 - MISO (SPI0), Open-Drain, Digital
// P0.2 - MOSI (SPI0), Open-Drain, Digital
// P0.3 - NSS (SPI0), Open-Drain, Digital
// P0.4 - TX0 (UART0), Open-Drain, Digital
// P0.5 - RX0 (UART0), Open-Drain, Digital
// P0.6 - SDA (SMBus), Open-Drain, Digital
// P0.7 - SCL (SMBus), Open-Drain, Digital
// P1.0 - CEX0 (PCA), Open-Drain, Digital
// P1.1 - Unassigned, Open-Drain, Digital
// P1.2 - Unassigned, Open-Drain, Digital
// P1.3 - Unassigned, Open-Drain, Digital
// P1.4 - Unassigned, Open-Drain, Digital
// P1.5 - Unassigned, Open-Drain, Digital
// P1.6 - Unassigned, Open-Drain, Digital
// P1.7 - Unassigned, Open-Drain, Digital
XBR0 = 0x07;
XBR1 = 0x45;
}
int main( void )
{
unsigned char tmp;
ClockInit( );
GPIOInit( );
Timer3Init( );
P1 &= ~0x1C;
P1MDOUT |= 0x1C;
HC164_Output( 7 );
EA = 1;
while( 1 ){
for( tmp = 0; tmp < 10; tmp ){
DelayMs( 50 );
}
//if(P0_0==0){
if( DisplayValue[0] > 9 ){
DisplayValue[0] = 0;
if( DisplayValue[1] > 9 ){
DisplayValue[1] = 0;
if( DisplayValue[2] > 9 ){
DisplayValue[2] = 0;
if( DisplayValue[3] > 9 ){
DisplayValue[3] = 0;
}
}
}
}
}
// }
return 0;
}
系統時間:2017-10-20 13:24:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!