#include"AT89X51.H"
#include <intrins.h>
#define int unsigned int
sbit ENB=P3^7;//11脚
sbit DAT=P3^6;//10脚
sbit SCLK=P3^5;//9脚
int data temp=0x00;
int data R=1200;//晶振12.00MHz,参考频率fr=10kHz//12.24MHz 10kHz
int data N=250;
int data A=0;
void delay(char ms)
{
char i;
while(ms--);
{
for(i=0; i<200;i++)
{
_nop_();//机器延时 1us
_nop_();
_nop_();
_nop_();
}
}
}
void write_R(void)
{ char i;
ENB=0;_nop_();
DAT=0; _nop_();
SCLK=0;_nop_();
DAT=1;_nop_();_nop_();//SW位,前置分频,0为64/65,1为32/33
SCLK=1;_nop_();_nop_();_nop_();
SCLK=0;_nop_();
temp=R;_nop_();
for(i=0;i<14;i++)
{ if((temp&0x2000)==0x2000)DAT=0x01; //写R分频系数共14位,先写高位
else DAT=0;
_nop_();_nop_();_nop_();
SCLK=1;_nop_();_nop_();_nop_();_nop_();
SCLK=0;_nop_();_nop_();
temp=temp<<1;
}
DAT=1;//控制位C,1时写入R寄存器
SCLK=1;_nop_();_nop_();_nop_();_nop_();
SCLK=0;_nop_();_nop_();
ENB=1;_nop_();_nop_();_nop_();_nop_();_nop_(); //使能信号,上升沿数据打入对应寄
//存器
SCLK=0;_nop_();_nop_();
//ENB=0;
}
void write_NA(void)
{
char i;
ENB=0;_nop_();
DAT=0; _nop_();
SCLK=0;_nop_();
temp=N; _nop_();
for(i=0;i<11;i++) //写N,共11位
{ if((temp&0x400)==0x400)DAT=0x01;
else DAT=0;
_nop_();_nop_();_nop_();
SCLK=1;_nop_();_nop_();_nop_();_nop_();
SCLK=0;_nop_();_nop_();
temp=temp<<1; _nop_();
}
temp=A;
for(i=0;i<7;i++) //写A,共7位
{ if((temp&0x40)==0x40)DAT=0x01;
else DAT=0;
_nop_();_nop_();
SCLK=1;_nop_();_nop_();_nop_();_nop_();
SCLK=0;_nop_();_nop_();
temp=temp<<1;
}
DAT=0;_nop_();//控制为C,0时数据写入NA寄存器
SCLK=1;_nop_();_nop_();_nop_();
SCLK=0;_nop_();
ENB=1;_nop_();_nop_();_nop_();_nop_();_nop_(); //使能信号,上升沿数据打入对应寄存器
SCLK=0;_nop_();_nop_();
ENB=0;_nop_();
}
void main(void)
{
SCLK=0;
ENB=0;
DAT=0;
write_R();
write_NA();
while(1) ;
//write_R();
//write_NA();
}