📄 sy9.c
字号:
//P3.0-P3.7 并行数据DB0-DB7
//P2.7 时钟信号
//使用定时器3中断程序改变输出电压
#include <c8051f000.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit CLK=P2^7;
sfr16 TMR3RL=0x92;
void sysclk_init();
void port_init();
void timer3_init();
void set_f(uint f);
void send_dac908(uchar dat);
uint n; //定时器3计数值
uchar k;
uchar da_dat;
void main()
{
sysclk_init();
port_init();
timer3_init();
set_f(100);
da_dat=0;
EA=0; //开总中断
for(;;)send_dac908(da_dat++);
}
void sysclk_init()
{
WDTCN=0XDE; //关看门狗
WDTCN=0XAD;
OSCICN=0x07; //内部16M时钟
}
void port_init()
{
XBR0=0X00; //
XBR1=0X00;
XBR2=0X40; //交叉开关允许
PRT0CF=0xFF; //P0设置为推挽输出
PRT1CF=0xFF; //设置为推挽输出
PRT2CF=0xFF; //
PRT3CF=0xFF; //
}
void timer3_init()
{
TMR3CN=0X06; //定时器3允许 使用系统时钟
EIE2|=0X1; //开定时器3中断
}
//-----------------------------------------
//通过设置定时器3初值 设置输出频率
//f:输出频率(1-31311hz)
//-----------------------------------------
void set_f(uint f)
{
uint n;
n=31311/f;
TMR3RL=n;
}
void ser_timer3() interrupt 14
{
TMR3CN&=0X7F; //中断标志清零
// send_dac908(0xF0);
/* if(da_dat==0)
k=1;
if(da_dat==255)
k=0;
if(k)
send_dac908(da_dat++);
else
send_dac908(da_dat--);
*/
}
void send_dac908(uchar dat)
{
CLK=1;
P3=dat;
CLK=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -