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

📄 comtest1.c

📁 监控摄像头云台的单片机89C51坏了,用自编程序写入芯片,功能完全一样
💻 C
字号:
//PC读MCU指令结构:(中断方式,ASCII码表示)
//帧:   帧头标志|帧类型|器件地址|启始地址|长度n|效验和|帧尾标志
//值:    'n' 'y'| 'r'  |  0x01  |   x    |  x  |   x  |0x13 0x10
//字节数:   2   |  1   |    1   |   1    |  1  |   1  |   2
//求和:


/////////////////////////////////////////////////////////////////////
//公司名称:***
//模 块 名:protocol.c
//创 建 者:牛毅
//修 改 者:
//功能描述:中断方式:本程序为mcu的串口通讯提供(贞结构)函数接口,包括具体协议部分
//其他说明:只提供对AT89c51具体硬件的可靠访问接口
//版    本:1.0
//信    息:QQ 75011221        C51BBS匿名:niuyi
/////////////////////////////////////////////////////////////////////
#include <comtest1.h>
//public 变量
  unsigned char databuf[FIELD_MAXBUF],errframe_cnt;

//函数

/////////////////////////////////////////////////////////////////////
//函 数 名:send()
//功能描述:向串口发送一个字符
//函数说明:
//调用函数:
//全局变量:
//输    入:ch-要发送的ASCII字符
//返    回:无
//设 计 者:牛毅
//修 改 者:
//版    本:
/////////////////////////////////////////////////////////////////////
void send(unsigned char ch)
{
	SBUF=ch;
	while(TI==0);
	TI=0;
}

/////////////////////////////////////////////////////////////////////
//函 数 名:receive()
//功能描述:从串口接收一个字符
//函数说明:
//调用函数:
//全局变量:
//输    入:无
//返    回:一个ASCII字符
//设 计 者:牛毅
//修 改 者:
//版    本:
/////////////////////////////////////////////////////////////////////
unsigned char receive(void)
{
	while(RI==0);
	RI=0;
	return SBUF;
}

/////////////////////////////////////////////////////////////////////
//函 数 名:CharToHex()
//功能描述:把ASCII字符转换为16进制
//函数说明:
//调用函数:
//全局变量:
//输    入:ASCII字符
//返    回:16进制
//设 计 者:牛毅
//修 改 者:
//版    本:
/////////////////////////////////////////////////////////////////////
/*
unsigned char CharToHex(unsigned char bChar)
{
    if((bChar>=0x30)&&(bChar<=0x39))
        bChar -= 0x30;
    else if((bChar>=0x41)&&(bChar<=0x46))//大写字母
        bChar -= 0x37;
    else if((bChar>=0x61)&&(bChar<=0x66))//小写字母
        bChar -= 0x57;
    else bChar = 0xff;
    return bChar;
}

/////////////////////////////////////////////////////////////////////
//函 数 名:HexToChar()
//功能描述:把16进制转换为ASCII字符
//函数说明:
//调用函数:
//全局变量:
//输    入:16进制
//返    回:ASCII字符
//设 计 者:牛毅
//修 改 者:
//版    本:
/////////////////////////////////////////////////////////////////////
unsigned char HexToChar(unsigned char bHex)
{
    if((bHex>=0)&&(bHex<=9))
        bHex += 0x30;
    else if((bHex>=10)&&(bHex<=15))//大写字母
        bHex += 0x37;
    else bHex = 0xff;
    return bHex;
}
*/
/////////////////////////////////////////////////////////////////////
//函 数 名:com_int()
//功能描述:初始化串口
//函数说明:默认其他参数为[baud_rate],n,8,1
//调用函数:
//全局变量:
//输    入:baud_rate 波特率
//返    回:无
//设 计 者:牛毅
//修 改 者:
//版    本:
/////////////////////////////////////////////////////////////////////
void com_init(unsigned int baud_rate)
{

    EA=1;
	ES=1;//ET1=1;  
    SCON = 0x50;    /* 0x52;//SCON */
    TMOD = 0x20;    /*0x20;// TMOD */
    TCON = 0x60;    /*0x60;// TCON */
    PCON=PCON&0x7f;


    switch(baud_rate)
	{    //波特率设置
        case 1200:
            TL1=0xe8;
			TH1=0Xe8;
			break;//1200
        case 2400:
            TL1=0xf4;
			TH1=0Xf4;
			break;//2400
        case 4800:
            TL1=0xfa;
			TH1=0Xfa;
			break;//4800
        case 9600:
            TL1=0xfd;
			TH1=0Xfd;
			break;//9600
        case 19200:
            PCON=PCON|0x80;
			TL1=0xfd;
			TH1=0Xfd;
			break;//19200
        case 38400:
            PCON=PCON|0x80;
			TL1=0xfe;
			TH1=0Xfe;
			break;//38400
        default:
             TL1=0xfd;
			TH1=0Xfd;
			break;//9600
    }
}
/////////////////////////////////////////////////////////////////////
//函 数 名:resend_frame()
//功能描述:发送重发帧
//函数说明:通知PC重发
//调用函数:
//全局变量:
//输    入:无
//返    回:无
//设 计 者:牛毅
//修 改 者:
//版    本:
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
//函 数 名:quit_frame()
//功能描述:发送放弃帧
//函数说明:通知PC放弃通讯
//调用函数:
//全局变量:
//输    入:无
//返    回:无
//设 计 者:牛毅
//修 改 者:
//版    本:
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
//函 数 名:com_int()
//功能描述:串口中断
//函数说明:
//调用函数:
//全局变量:
//输    入:无
//返    回:无
//设 计 者:牛毅
//修 改 者:
//版    本:
/////////////////////////////////////////////////////////////////////
void com_int()interrupt 4
{
	unsigned char i,clen;
		clen=3;
		databuf[0]=receive();
		if(databuf[0]==0x7)
		{
			for(i=1;i<clen;i++)
			{
             databuf[i]=receive();						
            
        	 }	
       	                        
    	}            
}

/////////////////////////////////////////////////////////////////

//主函数

/////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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