📄 cam_func.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 + -