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

📄 cam_func.c

📁 这是监视器行业常见摄像头与球机通讯协议的C语言源代码
💻 C
字号:

#include <REG54.H>
#include <INTRINS.H>
#include "config.h"


//发送或接收数据时关中断

#ifndef _CONFIG
	sfr WDTC = 0x8f;
	sbit ARXD = P1^2;
	sbit ATXD = P1^3;
#endif


//为9600波特率的摄像机使用
#ifdef FOCS_40M

void cam_bit_delays(void)
{
	register unsigned char j;
	
	for (j=0;j<110;j++);
	_nop_();_nop_();
}

void cam_bit_delayr(void)
{
	register unsigned char j;
	
	for (j=0;j<108;j++);
}

void half_bit_delay(void)	
{
	register unsigned char j;
	
	for (j=0;j<60;j++);
}

#else

void cam_bit_delays(void)
{
	register unsigned char j;
	
	for (j=0;j<59;j++);
	_nop_();
}

void cam_bit_delayr(void)
{
	register unsigned char j;
	
	for (j=0;j<56;j++);
	_nop_();
}

void half_bit_delay(void)	
{
	register unsigned char j;
	
	for (j=0;j<32;j++);
}

#endif

extern void cam_send_byte(unsigned char cam_data)
{
	register unsigned char i;

	//EA = 0;
	ATXD = 0;							// 发送起始码
	_nop_();
	
	for (i=0;i<8;i++)
	{
		cam_bit_delays();		
		cam_data >>= 1;
		ATXD = CY;	
	}
	cam_bit_delays();
	//EA = 1;
	ATXD = 1;						// 发送结束码
	cam_bit_delays();
	ATXD = 1;						// 发送结束码
	cam_bit_delays();
	cam_bit_delays();
}

extern unsigned char cam_receive_byte()
{
	unsigned int i = 0;
	unsigned char cam_data;

	EA = 0;
	RESET;	
	do
	{	
		ARXD = 1;
		if (!ARXD)
		{
			half_bit_delay();
			ARXD = 1;
			if (!ARXD)
			{
				cam_data = 0;
				_nop_();_nop_();_nop_();
				_nop_();_nop_();_nop_();_nop_();
				for(i=0;i<8;i++)					// 开始移位接收数据
				{
					cam_bit_delayr();
					cam_data >>= 1;
					ARXD = 1;
					if (ARXD) cam_data |= 0x80;		// '低位在前读数据'经典
				}
				goto sr_exit;
			}
		}
	}while ((++i) <10000);
sr_exit:
	EA = 1;
	return cam_data;
}

⌨️ 快捷键说明

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