📄 serial.c
字号:
/*------------------------------------------------
Setup the serial port for 115200 baud at 11.0592MHz. 8052
------------------------------------------------*/
void beep (void){
unsigned char data j;
unsigned int data i;
FNC=1;
for(j=5;j>0;j--){
for(i=10000;i>0;i--){
}
}
FNC=0;
}
void init(void){
PSW=0;
IP=1;
IE=0; //开 IT1,IT0
TCON=0;
TMOD=0x16; //t1 16 inter time, t0 exter 8reload
SCON=0xE0;
PCON=0x80;
TL0=0xff;
TH0=0xff;
P1=0x0; //关
status =0;
TCON=0;
on2500us= 0;
flashbit = 0;
serbit =0;
errbit =0;
t1_500ms = 0;
//beep();
//EA=1;
}
void initserial(void){
SCON = 0xe0; /* SCON: mode 1, 8-bit UART, enable rcvr */
T2CON = 0x30; /* TMOD: timer 2, mode 3, 16-bit reload */
//T2MOD = 0x00;
//PCON = 0x80;
//TH1 = 255; /* TH1: reload value for 1200 baud @ 16MHz */
//TL1 = 255;
RCAP2H = 0x0ff; //57600 FA 115200 Fd
RCAP2L = 0x0fd; // t1 :bps=2[smod]/32 *fosc/12 * (2[n]-x)
TH2 = 0x0ff; //t2: bps=fosc/32 / (65536-x) RCAP2L=0xfa
TR2 = 1; /* TR1: timer 1 run */
REN = 1;
TI = 0; /* TI: set TI to send first char of UART */
// P13 = 1; // enable DE
ES = 1; //
addres = TXADR;
addres &=0x0f;
addres +=0xc0;
}
/*
* putchar (mini version): outputs charcter only
*/
void sendchar (unsigned char c) {
//while (!TI);
TI = 0;
//return (SBUF = c);
SBUF = c;
while (!TI);
TI = 0;
}
void sendstring(unsigned char *p,unsigned char data lenth) // idata *p
{
unsigned char *ip;
unsigned char data i;
ip=p;
for(i=0;i<lenth;i++){
sendchar(*ip);
ip++;
}
}
unsigned char getchar () {
unsigned char data c=150;
while(!RI) { if(--c==0){ serbit=1;
return (0); }
} //serbit=1,
c = SBUF;
RI = 0;
return (c);
}
void getstring(unsigned char data *p,unsigned char data lenth)
{
unsigned char data *ip;
unsigned char data i;
ip=p;
for(i=0;i<lenth;i++){
*ip=getchar();
ip++;
if(serbit) break;
}
}
void PSerialInt(void) interrupt 4
{
unsigned char c[2],i;
if(_testbit_(RI)&&_testbit_(RB8)){
c[0]=SBUF;
//c[1]=getchar();
if(c[0]==addres){
P10 =1;
TB8 = 1;
sendchar(addres+1);
SM2 = 0;
TB8 = 0;
//get order
c[1]=getchar();
if(serbit) goto backser;
//ser[1]=getchar();
//ser[2]=getchar();
//ser[3]=getchar();
switch(c[1]){
case 0xf0: getstring(&GET[0],6);
if(GET[8]!=0x5a) serbit=1;
else { abc = 0;
for(i=0;i<32;i++){
GET[i] = 0;
LD[i] = 0; }
}
break;
case 0xf1: //ser[1]=getchar();
sendstring(&TT[0],32);
break;
case 0xf2: abc = getchar();
getstring(&GET[0],32);
for(i=0;i<32;i++){
TEMP[i] = TT[i];
}
break;
} //add code
if(serbit) sendchar(0x44);
else sendchar(0x88);
}
}
if(TI) TI=0;
backser:
P10 = 0;
SM2 = 1;
serbit =0;
}
void timego(void) interrupt 3
{ //定时 t1
//unsigned char data i;
TL1=_tl1;
TH1=_th1;
on2500us = 1;
if(++hang==16) hang=0;
if(onbeep) {
if(++beeptime>=200) FNC = ~FNC,beeptime =0;
}
if(++t1_500ms==200) { flashbit=~flashbit;
t1_500ms=0;
}
}
void getbattery(unsigned char data channel)
{
unsigned char data i,pm,pn,pl;
i=channel;
pm=i/128;
pn=(i%128)%8;
pl=(i%128)/8;
if(pm) { XBYTE[GD0]= gd_off;
XBYTE[GD1]=and1[pn];
}
else {
XBYTE[GD1]= gd_off;
XBYTE[GD0]=and1[pn];
}
XBYTE[VSEL] = V[pl];
REDGET = REDGET; //P1.7
REDGET = REDGET;
#ifdef battest
if(channel==0&&REDGET==1) {
REDGET = REDGET;
REDGET = REDGET;
}
#endif
if(REDGET) hasbattery = 1;
else hasbattery = 0;
XBYTE[VSEL] = v_off;
}
void getttstatus(unsigned char data channel)
{
unsigned char data i,m,n;
i = channel;
m = i/8;
n = i%8;
if(hasbattery) TT[m] |= or1[n];
else TT[m] &= and0[n];
}
void getttstatus(unsigned char data channel)
{
unsigned char data i,pm,pn,pl,m,n;
i=channel;
pm=i/128;
pn=(i%128)%8;
pl=(i%128)/8;
if(pm) { XBYTE[GD0]= gd_off;
XBYTE[GD1]=and1[pn];
}
else {
XBYTE[GD1]= gd_off;
XBYTE[GD0]=and1[pn];
}
XBYTE[VSEL] = V[pl];
REDGET = REDGET; //P1.7
REDGET = REDGET;
#ifdef battest
if(channel==0&&REDGET==1) {
REDGET = REDGET;
REDGET = REDGET;
}
#endif
if(REDGET) hasbattery = 1,TT[m] |= or1[n];
else hasbattery = 0,TT[m] &= and0[n];
XBYTE[VSEL] = v_off;
}
if(abc!=0){
if(hasbattery) {
if(GET[pm]&and1[pn]) LD[pm] |= and1[pn];
else LD[pm] &= and0[pn];
}
else {
if(TEMP[pm]&and1[pn]) {
errbit = 1;
if(flashbit) LD[pm] |= and1[pn];
else LD[pm] &= and0[pn];
}
}
}
/*
void getttstatus(unsigned char data channel)
{
unsigned char data i,pm,pn,pl;
unsigned int data l=500;
i=channel;
pm=i/128;
pn=(i%128)%8;
pl=(i%128)/8;
//delay_char(250);
REDGET = REDGET;
//#ifdef battest
if(i==156) { //&&REDGET==1
pm=0;
if(REDGET){
//while(REDGET) {pm++;}
REDGET = REDGET;
REDGET = REDGET;
}
}
//#endif
pm = i/8;
pn = i%8;
if(REDGET) hasbattery = 1,TT[pm] |= or1[pn];
else hasbattery = 0,TT[pm] &= and0[pn];
//XBYTE[VSEL] = v_off;
}*/
/*
void getledstatus(unsigned char data channel)
{
unsigned char data i,m,n;
i = channel;
m = i/8;
n = i%8;
if(TT[m]&and1[n]) {
if(GET[m]&and1[n]) LD[m] |= and1[n];
else LD[m] &= and0[n];
}
else {
if(TEMP[m]&and1[n]) {
if(GET[m]&and1[n]){
LD[m] &= and0[n];
}
else{
errbit = 1;
FNC = 1;
if(flashbit) LD[m] |= and1[n];
else LD[m] &= and0[n];
}
}
//else errbit = 0;
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -