微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AVR与VB通信模拟量输入简单程序

AVR与VB通信模拟量输入简单程序

时间:11-30 来源:互联网 点击:


//----------------------------------------AVR代码------------------------

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar seg[10]={0x3f,0x06,0x5b, //共阴极数码管0~9的字形码

0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar tab[4]={0xfe,0xfd,0xfb,0xf7};//4位共阴极数码管的位选码

#define UDRE 5

#define RXC 7

uchar datt; //接受到的数据比较变量

uchar adc_val; //模拟量转换值

void delay(uint k)

{

while(k--);

}

void port_init()

{

PORTA=0x7f; // 通道7作为模拟量输入

DDRA=0x7f;

PORTB=0xff;

DDRB=0xff;

PORTC=0xff;

DDRC=0xff;

PORTD=0xff;

DDRD=0xff;

}

void adc_init() //模拟量初始化

{

ADCSRA=0xe3;

ADMUX=0xc7;

}

uint adc_vert()

{

uint temp1,temp2;

temp1=(uint)ADCL;

temp2=(uint)ADCH;

temp2=(temp2<8)+temp1;

return temp2;

}

void time0_init() //定时器0初始化

{

TCNT0=0x83;

TCCR0=0x03;

TIMSK=0x01; //定时器0溢出中断

}

#pragma vector = 0x24

__interrupt void time0_vef()

{

static uchar i;

TCNT0=0x83;

i++;

if(i>3)i=0;

switch(i)

{

case 0:PORTA=seg[adc_val%10];PORTC=tab[0];break;

case 1:PORTA=seg[adc_val%100/10];PORTC=tab[1];break;

case 2:PORTA=seg[adc_val%1000/100];PORTC=tab[2];break;

case 3:PORTA=seg[adc_val/1000];PORTC=tab[3];break;

default:break;

}

}

void uart_init()

{

UCSRB=0x00; //串口不使能

UCSRA=0x02; //串口倍速模式

UCSRC=0x06; //数据长度设置为8位

UBRRL=0x67; //串口设置为9600波特率

UBRRH=0x00;

UCSRB=0x98; //串口接受和发送使能,接受中断使能

}

void uart_send(uchar k) //串口发送函数

{

while(!(UCSRA&(1 UDR=k;

}

uchar uart_receive()

{

while(!(UCSRA&(1return UDR;

}

void send_number(uint k)

{

uart_send((uchar)(k>>8));

uart_send((uchar)(k));

}

#pragma vector = 0x2c

__interrupt void uart_rxc()

{

datt=UDR;

if(datt==a)PORTB=0xff;

else PORTB=0x00;

}

void main()

{

port_init();

uart_init();

time0_init();

adc_init();

SREG=0x80;

while(1)

{

adc_val=adc_vert();

delay(50000);

delay(50000);

delay(50000);

send_number(adc_val);

}

}

//----------------------VB代码----------------------------

Private Sub Command1_Click()

MSComm1.CommPort = 4

MSComm1.PortOpen = True

MSComm1.InputMode = comInputModeBinary

MSComm1.InputLen = 0

Private Sub MSComm1_OnComm()

Dim bytereceive() As Byte 定义字节数组

Dim strbuf As String 定义字符串变量

Select Case MSComm1.CommEvent

Case comEvReceive 接受事件发生

Text2 = MSComm1.InBufferCount 显示接受缓冲区字节数

strbuf = MSComm1.Input 从输入缓冲区读取字符

bytereceive() = strbuf 字符串赋值给字符数组,低字节在前,高字节在后

Dim i As Integer

For i = 0 To UBound(bytereceive) UBound返回数组可用的最大长度

If Len(Hex(bytereceive(i))) = 1 Then

strdata = strdata & "0" & Hex(bytereceive(i))

Else

strdata = strdata & Hex(bytereceive(i))

End If

Next

Text1.Text = strdata 十六进制显示

Text3.Text = Val("&H" & strdata) 十进制显示

strdata = ""

End Select

End Sub

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top