搜索
bottom↓
回复: 1

vb编的上位机,和mega8通信不正确,请求帮助。

[复制链接]

出0入0汤圆

发表于 2008-4-11 22:05:31 | 显示全部楼层 |阅读模式
花了一天把硬件弄好了,可是现在用vb写的程序和单片机无法正确接收。这个问题看了好多网页都没有弄懂。刚学,请高手们帮忙看看。谢谢
单片机程序是:每隔一秒发送一个字符。vb是事件触发。输出:
0
0
152
230
24然后就不动了。。。
#include <iom8v.h>
#include <macros.h>
#define fosc 8000000
#define baud 9600
#define uchar unsigned char
#define uint unsigned int
/****************全局变量定义*******************/
unsigned char timeNum,count;
unsigned char TimeFlag,Num;
unsigned char a[20];
void putchar(unsigned char c){
         while(!(UCSRA &(1<<UDRE)));
         UDR=c;
}
unsigned char getchar(void){
                 while(!(UCSRA &(1<<RXC)));
                 return UDR;
}

void uart_init(void){
UCSRB=(1<<RXEN)|(1<<TXEN);
UBRRL=(fosc/16/baud-1)%256;
UBRRH=(fosc/16/baud-1)/256;
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
void timer0_init(void)
{
        TCCR0 = 0x00;//停止定时器
        TIMSK |= 0x01;//中断允许
        TCNT0 = 0x06;//初始值
        TCCR0 = 0x03;//启动定时器 clk/64
}
#pragma interrupt_handler timer0_isr:10
void timer0_isr(void)
{
         TCNT0 = 0x06; //重装初始值6
     if(++count==5) //是否百分秒
                {count=0;
                timeNum++;
                if(timeNum==100)//1秒
                {timeNum=0;
                if(Num<=17)putchar(a[Num++]);
                else {
                putchar(0x0a);
                putchar(0x0b);
                Num=1;
                TimeFlag=1;
                }
        }
}
}

void main(void){
  unsigned char i;
  timer0_init();
  uart_init();
  SEI();
  DDRD = 0xFF;            /* output */
  PORTD = 0x00;         /* all off */         
  a[1]=0xaa;     //开始位
  for (i=2; i<18; i++)
    a=i;
    TimeFlag=0;   //1s定时到,置为1
    while(1)
    {    if (TimeFlag==1)
         for (i=2; i<18; i++)
            a=a+1;                     
         TimeFlag=0;
          }
}
——————————————————————
Option Explicit

Dim out() As Byte
Dim buff As String
Private Sub Command1_Click()
MSComm1.PortOpen = False
Unload Me
End Sub

Private Sub Form_Load()

MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 1
MSComm1.InBufferSize = 60
MSComm1.InputMode = comInputModeBinary
'&para;&Euml;&iquest;&Uacute;&acute;ò&iquest;&ordf;
If MSComm1.PortOpen = False Then
   MSComm1.PortOpen = True
End If
MSComm1.RThreshold = 1
MSComm1.SThreshold = 10
Timer1.Interval = 500
Timer1.Enabled = True
End Sub

Private Sub MSComm1_OnComm()
Dim i
Dim var As Variant, lngData() As Byte
  With MSComm1
     Select Case .CommEvent
            Case comEvReceive
            .RThreshold = 0
            var = MSComm1.Input
            lngData = var
            For i = 0 To UBound(lngData)
            Text1.Text = Trim(Text1.Text) + Str(lngData(i))
            Next
           Text1.Text = Trim(Text1.Text) + Chr(13) + Chr(10)
           .RThreshold = 1   
     End Select
End With
End Sub

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2008-4-12 01:40:15 | 显示全部楼层
分步调试,先用串口调试助手检查单片机发出的数据是否正确,然后再调上位机程序.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-31 14:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表