📄 main3.c
字号:
//P4.7---SDA
//P4.6---SCL
#include "msp430x44x.h"
#define LATCH 0X80; //16CLK引脚,P3.7
#define CLK 0X01; //TXD2引脚,P4.0
#define DATA 0x02; //RXD2引脚,P4.1
#define CVCON4 0x40; //CVCON4引脚,P3.6
#define uchar unsigned char
#define uint unsigned int
int da_value=0xB000;
long alarm_value=0x3800;
//long alarm_value=0x16000;
void Delay(int m)
{
while(m-- > 0);
}
void alarm_convert(long alarmdata){ //4到20mA电流输出程序
uchar dataH2,dataH,dataL,i;
dataH2=(alarmdata&0x10000)>>16;
dataH=(alarmdata&0x00FF00)>>8;
dataL=(alarmdata&0x0000FF);
P4DIR |= CLK; //传送最高位
Delay(30);
if(dataH2&0x01){
P4DIR &=~DATA;
}
else{
P4DIR |= DATA;
}
Delay(30);
P4DIR &=~CLK;
Delay(30);
for(i=0;i<8;i++){ //传送高八位,从高位传起
P4DIR |= CLK;
Delay(30);
if(dataH&0x80){
P4DIR &=~DATA;
}
else{
P4DIR |= DATA;
}
Delay(30);
P4DIR &=~CLK;
Delay(30);
dataH=dataH<<1;
}
for(i=0;i<8;i++){ //传送低八位,从高位传起
P4DIR |= CLK;
Delay(30);
if(dataL&0x80){
P4DIR &=~DATA;
}
else{
P4DIR |= DATA;
}
Delay(30);
P4DIR &=~CLK;
Delay(30);
dataL=dataL<<1;
}
P3DIR |= LATCH;
Delay(30);
P3DIR &=~LATCH;
}
void ideal_convert(int ad421data){ //报警信号电流输出程序
uchar dataH,dataL,i;
dataH=(ad421data&0xFF00)>>8;
dataL=(ad421data&0x00FF);
for(i=0;i<8;i++){ //传送高八位,从高位传起
P4DIR |= CLK;
Delay(30);
if(dataH&0x80){
P4DIR &=~DATA;
}
else{
P4DIR |= DATA;
}
Delay(30);
P4DIR &=~CLK;
Delay(30);
dataH=dataH<<1;
}
for(i=0;i<8;i++){ //传送低八位,从高位传起
P4DIR |= CLK;
Delay(30);
if(dataL&0x80){
P4DIR &=~DATA;
}
else{
P4DIR |= DATA;
}
Delay(30);
P4DIR &=~CLK;
Delay(30);
dataL=dataL<<1;
}
P3DIR |= LATCH;
Delay(30);
P3DIR &=~LATCH;
}
void main(void)
{
P3OUT &=~0xc0; //CVCON4低电平,芯片供电,latch输出0
P4OUT &=~0x03; //CLK和DATA引脚输出0
P3DIR |= CVCON4; //低电平开始输出,AD421开始工作
//P3DIR &=~CVCON4;
WDTCTL = WDTHOLD+WDTPW;
ideal_convert(da_value);
_NOP();
da_value=0x0000;
ideal_convert(da_value);
_NOP();
alarm_convert(alarm_value);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -