📄 main.c
字号:
#include<msp430x21x1.h>
#include"PTR6000.H"
#define si BIT2
#define max_rt 0x10
#define tx_ds 0x20
#define rx_dr 0x40
#define flush_tx 0xe1
#define flush_rx 0xe2
unsigned char dat1;
void INT_CLK(void);
extern unsigned char read_shuju=0;
unsigned char sent_addr[5]={0x34,0x43,0x10,0x10,0x01};
//$$$$$$$$$$$$$$$$$$$$$$$$
unsigned int send_date[16]={
16,17,18,19,20,21,22,23,
24,25,26,27,28,29,30,31};
unsigned int receive_date[16]={0} ;
//$$$$$$$$$$$$$$$$$$$$$$$
void Init_Port(void);
void write(uchar b);
uchar read(void);
void w_txaddr(uchar addr,uchar *com);
void w_register(uchar addr,uchar com); //写寄存器
uchar r_register(uchar addr); //读寄存器
void w_tx(void);
void r_rx(void);
void clr_tx(void);
void clr_rx(void); //一般读完rx_fifo会自动清除,不必调用该函数
void main()
{
uchar read_data,i;
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
_DINT(); //关闭中断
Init_Port();
//P1OUT |= BIT0;
P1OUT |= BIT1;
P1OUT |= BIT2;
P1OUT |= BIT3;
P2OUT=0XFF;
INT_CLK();
w_register(0x23,0x03);
_NOP();
dat1=r_register(0x03);
ce_Low();
w_register(0x20,0x0A); //设为发射机
read_shuju=r_register(0x00);
w_txaddr(0x30,sent_addr);
w_register(0x21,0x01);
w_register(0x22,0x01);
w_register(0x31,0x08); //设置数据宽度
read_data=r_register(0x00);
w_register(0x27,r_register(0x07)); //清中断
w_tx();
ce_High();
for(i=0;i<15;i++);
while((P1IN&0x01)==0x01);
ce_Low();
read_data=r_register(0x07);
w_register(0x27,read_data); //清中断
switch(read_data&0xf0) //判断中断信号屏蔽低字节
{case max_rt:while(1);
case rx_dr :r_rx();break;
case tx_ds :clr_tx();break;
default: while(1);
}
//P5OUT |= BIT6;
while(1);
}
void Init_Port(void)
{
P1SEL &= ~BIT0;
P1SEL &= ~BIT1;
P1SEL &= ~BIT2;
P1SEL &= ~BIT3;
// P2SEL = 0; //将P2口设置成普通I/O口
P2DIR |= BIT3; //CE
P2DIR |= BIT2; //CSN
P1DIR |= BIT0; //IRQ
P1DIR |= BIT1; //MISO
P1DIR |= BIT2; //MOSI
P1DIR |= BIT3; //SCK
//P1DIR &= ~(BIT0);
//P1IES |= BIT0; //开中断
//P1IE |= BIT0;
return;
}
void write(uchar b) //高位在前,低位在后
{char i,j;
for(i=0;i<8;i++)
{
if((b&0x80)==0x80)
{
mo_High();
}
else
{
mo_Low();
}
sck_High();
for (j=10;j>0;j--);//延迟一段时间
sck_Low();
b<<=1;
}
}
uchar read(void)
{
uchar i,j,a=0;
for(i = 0;i < 8;i++)
{
if(P1IN & si)
{
a |= (0x01 << (7-i));
}
sck_High();
for(j = 10;j > 0;j--);
sck_Low();
}
return(a);
}
void w_register(uchar addr,uchar com) //写寄存器
{
sck_Low();
csn_Low();
write(addr);
write(com);
csn_High();
}
uchar r_register(uchar addr) //读寄存器
{
uchar date;
sck_Low();
csn_Low();
write(addr);
date=read();
csn_High();
return(date);
}
void w_tx(void)
{uchar i;
sck_Low();
csn_Low();
write(0xa0);
for(i=0;i<8;i++) //写tx_fifo
write(send_date[i]);
csn_High();
}
void r_rx(void)
{uchar i;
sck_Low();
csn_Low();
write(0x61);
for(i=0;i<8;i++)
receive_date[i]=read();
csn_High();
}
void clr_tx(void)
{
sck_Low();
csn_Low();
write(flush_tx);
csn_High();
}
void clr_rx(void) //一般读完rx_fifo会自动清除,不必调用该函数
{
sck_Low();
csn_Low();
write(flush_rx);
csn_High();
}
void w_txaddr(uchar addr,uchar *com)
{
uchar i;
sck_Low();
csn_Low();
write(addr);
for(i=0;i<5;i++)
{
write(com[i]);
}
csn_High();
}
void INT_CLK(void)
{
WDTCTL = WDTPW + WDTHOLD;
DCOCTL = CALDCO_8MHZ;
BCSCTL1 = CALBC1_8MHZ;
BCSCTL2 = 0x16;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -