📄 main.c
字号:
#include <reg51.h>
#include <stdio.h>
#include <intrins.h>
static unsigned char data dat[50]; //dat[50] is used to store sampling values
static unsigned char ind; //index var
void initial_RAM (); //initializing RAM function
//void initial_timer (int pTMOD,pTH0,pTL0,pTH1,pTL1); //initializing timer function, parameters defined as names
void initial_COM ();
void start_sampling ();
void start_transport ();
int main()
{
initial_RAM(); //initializing RAM
EA = 1; //enable global interrupt
//initial other varibles
ind = 0;
initial_COM();
//start_sampling();
while(1);
}
//initializing RAM
void initial_RAM ()
{
for (ind = 1; ind < 50; ind++)
{
dat[ind] = 0x00;
}
}
void start_sampling()
{
//initializing timer
TMOD = 0x15; //timer0:counter, timer1:timer for 50 ms, mode = 16 bit C/T
TH0 = 0x00;
TL0 = 0x00;
TH1 = 0x3C;
TL1 = 0xB0;
ET1 = 1; //enable timer1 interrupt
TR0 = 1; //start timer
TR1 = 1;
}
void start_transport()
{
/*
//initializing COM
SCON = 0x40; //uart in mode 1 (8 bit), REN=0
TMOD = 0x20; //timer 1 in mode 2
TH1 = 0xFD; //9600 Bds at 11.059MHz
TL1 = 0xFD; //9600 Bds at 11.059MHz
TR1 = 1;
ES = 1; //enable COM interrupt
// ES = 0; //disable COM interrupt
*/
initial_COM();
//transporting
do
{
SBUF = dat[ind];
ind--;
while(!TI);
TI = 0;
}
while (ind != 0);
}
//timer interrupt
void timer1out (void) interrupt 3
{
//stop timer
TR0 = 0;
TR1 = 0;
//save counter data,low byte in lower address
dat[ind] = TL0;
// dat[ind] = ind;
ind++;
dat[ind] = TH0;
// dat[ind] = ind;
ind++;
//if sampling ends, tranport datas. Or goon sampling
if (ind >= 50)
{
ind--;
start_transport();
}
//reset timer
TMOD = 0x15;
TH0 = 0x00;
TL0 = 0x00;
TH1 = 0x3C;
TL1 = 0xB0;
//restart timer
TR0 = 1;
TR1 = 1;
}
//COM interrupt
void COM_interrupt (void) interrupt 4
{
TR1 = 0; //stop timer1
if (RI == 1) RI = 0; //clear RI flag
if (TI == 1) TI = 0; //clear TI flag
start_sampling();
}
/*
void initial_timer(int pTMOD,pTH0,pTL0,pTH1,pTL1)
{
TMOD = pTMOD;
TH0 = pTH0;
TL0 = pTL0;
TH1 = pTH1;
TL1 = pTL1;
}
*/
void initial_COM ()
{
SCON = 0x50; //uart in mode 1 (8 bit), REN=1
TMOD = 0x20 ; //Timer 1 in mode 2
TH1 = 0xFD; //9600 Bds at 11.059MHz
TL1 = 0xFD; //9600 Bds at 11.059MHz
ES = 1; //Enable serial interrupt
REN = 1; //enable receiving
TR1 = 1; //start timer1 bouds_gen
RI = 0;
TI = 0;
SM0 = 0;
SM1 = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -