📄 main2ms.c
字号:
//main.c
//
//
#pragma OT(8,SPEED) BR NOIP FF(0) DB OE CD
#include <reg52.h>
#include <absacc.h>
#include <ADEF.h>
#include <INTRINS.H>
void getbattery(unsigned char data channel); //judge hasbattery bit
void getledstatus(unsigned char data channel); //get a channel status to LD[32]
void getttstatus(unsigned char data channel);
/*------------------------------------------------
Ssetup 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;
onbat =0;
t1_500ms = 0;
sec5 = 0;
//wait3ms = 0;
//beep();
//EA=1;
pt = 0;
XBYTE[LD0] = 0x0; //LED hang
XBYTE[LD1] = 0x0;
XBYTE[LED0] = 0x0; // 540 lie
XBYTE[LED1] = 0x0;
XBYTE[GD0]= gd_off;
XBYTE[GD1]= gd_off;
abc = 0;
}
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 24M F2
RCAP2L = 0x0fa; // 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 delay_char(unsigned char data mstime)
{
unsigned char data i;
i=mstime;
while(--i){}
}
void delay_int(unsigned int data mstime)
{
unsigned int data i;
i=mstime;
while(--i){}
}
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 int data c=1000;
while(!RI) { //if(--c==0){ serbit=1;
//return (0); }
// while(c)
} // serbit=1
c = SBUF;
RI = 0;
return (c);
}
void getstring(unsigned char idata *p,unsigned char data lenth)
{
unsigned char idata *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; //over out
//ser[1]=getchar();
//ser[2]=getchar();
//ser[3]=getchar();
switch(c[1]){
case 0xf0: getstring(&GET[0],6);
if(GET[4]==0) onbat =1;
else onbat =0;
if(GET[5]!=0x55) 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];
}
if(abc==0) {
for(i=0;i<32;i++){
LD[i] = GET[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(++pt==2) pt = 0;
//if(pt==0){
// pm=channel/128;
// pn=(channel%128)%8;
// pl=(channel%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];
// }
if(pt==1) {
channel++;
pm = (channel-1)/8;
pn = (channel-1)%8;
REDGET = REDGET;
//
//if(channel==210||channel==209){
//REDGET = REDGET;
// }
if(REDGET) hasbattery = 1,TT[pm] |= or1[pn];
else hasbattery = 0,TT[pm] &= and0[pn];
XBYTE[VSEL] = v_off;
pm=channel/128;
pn=(channel%128)%8;
pl=(channel%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];
}
if(onbeep) {
if(++beeptime>=500) FNC = ~FNC,beeptime =0;
}
if(++t1_500ms>=500) { flashbit=~flashbit;
t1_500ms=0;
if(++sec5>=8){
sec5=0;
errbit=0;
}
}
}
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;
if(pm) { XBYTE[GD0]= gd_off;
XBYTE[GD1]=and1[pn];
}
else {
XBYTE[GD1]= gd_off;
XBYTE[GD0]=and1[pn];
}
XBYTE[VSEL] = V[pl];
delay_char(250);
//delay_int(250);
//pm=255;
//while(REDGET&&pm) {pm++;}
//REDGET = REDGET; //P1.7
//REDGET = REDGET;
//while(REDGET&&l) {l--;}
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;
if(flashbit) LD[m] |= and1[n];
else LD[m] &= and0[n];
}
}
//else errbit = 0;
}
}
void writeled(unsigned char data hang)
{
//unsigned char data i;
XBYTE[LED0] = led_off; //hang 0-15
XBYTE[LED1] = led_off;
if(hang/8) { XBYTE[LD0] = 0x0;
XBYTE[LD1] = and1[hang%8];
}
else {
XBYTE[LD1] = 0x0;
XBYTE[LD0] = and1[hang%8];
}
if(onbat) {
XBYTE[LED0] = TT[hang]; //hang 0-15
XBYTE[LED1] = TT[hang+16];
}
else {
XBYTE[LED0] = LD[hang]; //hang 0-15
XBYTE[LED1] = LD[hang+16];
}
}
void main(void)
{
unsigned char data i;
init();
initserial();
beep(); //lingshiqudiao
channel = 0;
IE=0x98; //0x98
TCON=0X40;
XBYTE[LD0] = 0x01; //LED hang
XBYTE[LD1] = 0x0;
XBYTE[LED0] = 0xff; // 540 lie
XBYTE[LED1] = 0x00;
//test
/*
XBYTE[LD0] = 0x01; //LED hang
XBYTE[LD1] = 0x0;
XBYTE[LED0] = 0xff; // 540 lie
XBYTE[LED1] = 0xff;
XBYTE[GD0] = 0x40; //LED hang
XBYTE[GD1] = 0x0;
XBYTE[VSEL] = V[0]; // 540 lie
*/
channel = 0;
hang = 15;
XBYTE[GD1]= gd_off;
XBYTE[GD0]=and1[0];
XBYTE[VSEL] = V[0];
//do{
// getttstatus(channel);
// }while(++channel<8);
while(1){
if(on2500us){
on2500us = 0;
writeled(hang); //hang
}
//getttstatus(channel);
if(abc!=0) getledstatus(i++); //get a channel status to LD[32]
if(errbit) onbeep =1;
else onbeep =0,FNC =0;
//if(++channel==0) errbit=0;
//if(channel==0) {
// m++;
// }
//if(channel%16==0){ //del
// if(++hang==16) hang=0;
// writeled(hang);
// }
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -