|
#include <msp430.h>
void GPIO_Init();
void clk_init(void);
void usart_txd(char udata);
char usart_rxd(void);
void usart_proc(void);
char time_flag = 0;
char sec=0,min=0,hour=0;
char sec_l,sec_h,min_l,min_h,hour_l,hour_h;
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
GPIO_Init();
clk_init();
_bis_SR_register(LPM0_bits+GIE);
while(1)
{
if(time_flag == 1)
{
time_flag = 0;
usart_proc();
}
}
}
void GPIO_Init()
{
P1DIR |= BIT0+BIT6; //设定P1.0和P1.6的输出初始值
P1OUT |= BIT0+BIT6;
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
}
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A(void)
{
P1OUT ^=0X41;
time_flag = 1; //1秒时间到
sec++;
if(sec > 59)
{
sec = 0;
min++;
if(min > 59) //1小时时间到
{
min = 0;
hour++;
if(hour > 23) //24小时时间到
hour = 0;
}
}
}
void clk_init(void)
{
// 初始化timer
TACTL = TASSEL_1 + ID_0 + MC_1; // ACLK/1, UP MODE
CCTL0 |= CCIE;
CCR0 = 32768;
// 初始化usart
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK
UCA0BR0 = 0x03; // 32kHz/9600 = 3.41
UCA0BR1 = 0x00;
UCA0MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3
UCA0CTL1 &= ~UCSWRST;
}
void usart_txd(char udata)
{
while (!(IFG2 & UCA0TXIFG));
UCA0TXBUF = udata;
}
char usart_rxd(void)
{
if(IFG2 & UCA0RXIFG)
{
return UCA0RXBUF;
}
else
return 0;
}
void usart_proc(void)
{
usart_txd((hour / 10) + 0x30); //发送时十位
usart_txd((hour % 10) + 0x30); //发送时个位
usart_txd(':'); //发送冒号
usart_txd((min / 10) + 0x30); //发送分十位
usart_txd((min % 10) + 0x30); //发送分个位
usart_txd(':'); //发送冒号
usart_txd((sec / 10) + 0x30); //发送秒十位
usart_txd((sec % 10) + 0x30); //发送秒个位
usart_txd(0x0D); //发送回车
usart_txd(0X0A); //发送
}
利用定时器和USart写的一个发送时分秒的程序,问什么在超级终端上没显示(其他USART可以显示),求大神解决啊!
|
|