📄 time2.c
字号:
#include <c8051F320.h>
#define uchar unsigned char
#define uint unsigned int
#define SYSCLK 24000000
#define uart_rate 19200
#define C_TMR1 -((SYSCLK/48)/2)/uart_rate
#define T3_VAL -(SYSCLK/12/1000)*20
sbit BEEP = P3^0;
sbit LED_SEL = P1^7;
void SYSCLK_Init (void);
void ENA_WDT(void);
void Port_Init(void);
void Timer1_Init(void);
void Uart0_Init(void);
void transmitte (void);
//void checktime (void);
void Timer3_Init(void);
void check_time (void);
uchar data second_count = 50;
//uchar code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
uchar code trdata1[]={"学号 = 05281060 05281084 \n日期 = 2007年12月23日\r\n\r\n\0"};
//uchar data time[]={"asas"}
uchar code *data point;
//uchar data *data point2;
uchar data i,j;
uint data k,l;
bit TRANS_NEXT_BYTE_OK,tr_en;
void main(void)
{
ENA_WDT();
SYSCLK_Init ();
Uart0_Init();
Port_Init();
Timer1_Init ();
Timer3_Init();
PCA0CPH4=0;
point = trdata1;
// point2=time;
ES0 = 1;
TI0 = 1;
EA = 1;
while (1)
{
if (TRANS_NEXT_BYTE_OK) transmitte ();
if ((TMR3CN&0x80) == 0x80) check_time ();
if ((*point == '\0')&&tr_en)
{
tr_en = 0;
point = trdata1;
//point2=time;
TI0 = 1;
}
PCA0CPH4 = 0;
}
}
void SYSCLK_Init (void)
{
uchar data i;
CLKMUL |= 0x80;
for (i=0;i<20;i++);
CLKMUL |= 0xc0;
while ((CLKMUL&0x20)==0); //无法软件仿真
CLKSEL |= 0x02;
}
void Port_Init(void)
{
XBR0 = 0x01; //uart的tx,rx分配至p0.4及p0.5
P0MDOUT |= 0x10; //uart的tx为推挽输出
XBR1 = 0x40; //使能交叉矩阵,弱上拉
//关闭音响和LED,对应新实验板,与仿真无关
BEEP = 0;
P2 = 0;
LED_SEL = 0;
LED_SEL = 1;
LED_SEL = 0;
LED_SEL = 1;
}
void ENA_WDT(void)
{
PCA0MD &= ~0x40;
PCA0MD &= 0xb1;
PCA0CPL4 = 255;
//PCA0MD |= 0x40; //无法软件仿真
PCA0CPH4=0;
}
void Timer1_Init(void)
{
CKCON |= 0x02; //定时器1和2的触发时钟为 sysclk/48 = 0.5MHZ
CKCON &= ~0x08;
TMOD |= 0x20; //定时器1为模式2,8位自动重装
TMOD &= ~0x10;
TH1 = C_TMR1; //设置定时器1的重装值,-13,即0xf3
TL1 = C_TMR1;
TR1 = 1; //启动定时器1
}
void Uart0_Init(void)
{
SCON0 = 0xD0; //9位数据,允许接收
//偶校验由软件实现
ES0 = 1; //允许UART中断
}
void Uart0_ISR(void) interrupt 4
{
if (RI0)
{
RI0 = 0;
}
if (TI0)
{
TI0 = 0;
TRANS_NEXT_BYTE_OK = 1;
}
}
void transmitte (void)
{
TRANS_NEXT_BYTE_OK = 0;
if (*point != '\0')
{
ACC = *point;
TB80 = P;
SBUF0 = ACC;
point++;
}
/* if (*point2 != '\0')
{
ACC = *point2;
TB80 = P;
SBUF0 = ACC;
point2++;
}*/
}
void Timer3_Init()
{
TMR3L=T3_VAL;
TMR3H=T3_VAL>>8;
TMR3RLL=T3_VAL;
TMR3RLH=T3_VAL>>8;
TMR3CN=0x04;
}
/*
void checktime (void)
{
TMR3CN &= 0x7f;
if(second_count != 0) second_count--;
else
{
second_count = 50;
RING = 1;
if(second<0x59)
{
second++;
second = da_adjust(second);
ring_tmr = 5;
}
else
{
second=0;
if(minute<0x59)
{
minute++;
minute=da_adjust(minute);
ring_tmr = 25;
}
else
{
minute=0;
ring_tmr=50;
if(hour<0x23)
{
hour++;
hour=da_adjust(hour);
}
else hour=0;
}
}
}
if(ring_tmr != 0)
{
ring_tmr--;
if(ring_tmr == 0) RING = 0;
}
tmr3_done=0;
} */
void check_time (void)
{
TMR3CN &= 0x7f;
if(second_count != 0) second_count--;
else
{
second_count = 50;
tr_en = 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -