📄 61510.c
字号:
/*///////////// 本程序意在通过串口控制61510////////////////*/
#include "STC89C51.h"
#include "init.h"
#define uch unsigned char
#define TRUE 1
#define FALSE 0
uch M61510_pulse_num; //脉冲计数
uch M61510_clock_level; //时钟电平
uch M61510_data; //送入M61510的数据
uch M61510_analog_series; //M61510模拟串行定时器中断数
void timer0() interrupt 1 //定时器0中断函数,在允许中断情况下,定时器溢出时产生动作。
{
M61510_analog_series++;
}
void delay(x)
{
while (M61510_analog_series<x)
{
TR0=1; //启动定时器T0
ET0=1; //启动定时器中断T0
}
M61510_analog_series=0;
TR0=0; //关断定时器T0
ET0=0; //关断定时器T0
}
void send_M61510() /*自变量可否为位。若可以,就可写个通用函数*/
{
uch z;
uch y;
while(pulse_num<8)
{
if (clock_level==0)
{
y=0x01>>M61510_pulse_num;
z=M61510_data&y;
if (z>=1)
{
M61510_DATE=1;
}
else
{
M61510_DATE=0;
}
delay(1);
M61510_CLOCK=1; //数据稳定之后给时钟上升延
clock_level=1;
M61510_pulse_num++;
delay(1);
}
else if(clock_level==1) //
{
POWER_DATE=0;
delay(1);
POWER_CLOCK=0;
clock_level=0;
}
}
pulse_num=0;
M61510_CS=1;
delay(2);
M61510_CS=0;
M61510_data=0;
TR0=0; //定时器计数条件3-1
ET0=0; //定时器中断条件3-3,开启定时器0中断
}
void time_init()
{
TMOD=0X22; //T0,T1工作于方式2自动重装8位计数器
TL1=0xfd;
TH1=0xfd;
SCON=0x50; //01010000,方式一,允许接收
PCON=0x00;
TR1=1; //允许T1运行
///////////////////////////////////////////
TH0=0xF0;//13us定时,13X4=52us约等于19200 ,本应为F2,减去两个机器周期
TL0=0xF0;//0XFF-0xF2=0x0D=13
EA=1; //定时器中断条件3-2
}
void main()
{
time_init();
while (1)
{
if (RI==1)//
{
CD4094_data=SBUF;
RI=0;
send_M61510();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -