⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pc_115k.c

📁 W78EXX系列单片机编程器制作资料
💻 C
字号:
//115.2k串行口通信程序,校验方式为简单双向校验,
//而且是必要的,因为任何采用中断、crc等的方法
//均很难保证速度和避免错误.
//总体速度5KB/秒



//单片机程序
//使用22.1184晶振
unsigned char time,b_break,b_break_3;
//35.555ms
void int_t0(void) interrupt 1 {
	TH0=0;
	if ((++b_break_3)>2) b_break=1;
	time++;
}


unsigned char rec(void) {
	TH0=0;b_break_3=0;b_break=0;
	while (RI==0) {
		if (b_break) return(1);		//等待pc发送100ms超时
	}
	RI=0;
	SBUF=SBUF;
	return(SBUF);
}
/*返回1表示失败*/
bit sen(unsigned char d) {
	SBUF=d;
	TH0=0;b_break_3=0;b_break=0;
	while (RI==0) {
		if (b_break) return(1);		//等待pc送回相同字节数据,100ms超时
	}
	RI=0;
	if (SBUF!=d) return(1);
	return(0);
}

void main(void) {
	unsigned int i;
	unsigned char d;
	EA=1;
	SCON=0xd8;PCON=0x80;
	TMOD=0x21;
	TL1=TH1=0xff;TR1=1;
	TH0=0;ET0=TR0=1;
	while (1) {
		d=rec();
		if ((!b_break)&&(d==0x55)) {
			d=rec();
			if (!b_break) {
				if (d==0xaa) {
					//接收到pc送来的要求发送指令0xaa55
					for (i=0;i<1000;i++) {
						if (sen(i)) {
							//发送错误
							break;
						}
					}
				} else if (dd==0xaa) {
					//接收到pc送来的要求接收指令0xaaaa
					for (i=0;i<1000;i++) {
						d=rec();
						if (!b_break) {
							//正确接收处理
						} else {
							//接收错误处理
							break;
						}
					}
				}
			}
		}
	}
}



//电脑程序tc2.0
#include "stdio.h"
#include "dos.h"
#include "process.h"
#include "string.h"
#include "conio.h"
#include <dir.h>


unsigned char time_out;

void init_com1(void) {
	outportb(0x3fb,0x80);
	outportb(0x3f8,1);
	outportb(0x3f9,0x0);
	outportb(0x3fb,0x3);
}
void sen_com1(unsigned char d) {
	long i;
	time_out=0;
	while (!(inportb(0x3fd)&0x20));
	outportb(0x3fd,0x0);
	outportb(0x3f8,d);
	i=clock();
	while (1) {
		if (clock()>(i+8)) {time_out=1;return;}
		if ((inp(0x3fd)&0x1)==1) break;
	}
	if (inp(0x3f8)!=d) {time_out=2;return;}
}
unsigned char rec_com1(void) {
	long i;
	unsigned char d;
	time_out=0;
	i=clock();
	while (1) {
		if (clock()>(i+8)) {time_out=1;return(0);}
		if ((inp(0x3fd)&1)==1) break;
	}
	d=inp(0x3f8);
	while (!(inportb(0x3fd)&0x20));
	outportb(0x3fd,0x0);
	outportb(0x3f8,d);
	return(d);
}
void main(void) {
	int i;
	long st;
	init_com1();
	st=clock();
	sen_com1(0xaa);
	if (time_out) {printf("CPU not ready!");exit(-1);}
	sen_com1(0xaa);
	if (time_out) {printf("CPU not ready!");exit(-1);}
	for (i=0;i<1000;i++) {
		sen_com1(i);
		if (time_out) {printf("CPU not ready!");exit(-1);}
	}
	printf("Total use %3.2f S.",(clock()-st)/18.2);
	exit(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -