ATMEGA168用串口调试助手进行调试。接收也接收不到数据,发送也发送不了数据。【恢复
Gorgon Meducer 傻孩子:=============================
我现在用的是ATMEGA168单片机。5V供电。频率8M。
想使用它的串口进行数据传输。使用MAX232进行电平转换。使用中断方式。
以下是代码。使用串口调试助手进行调试。接收也接收不到数据,发送也发送不了数据。
想请Gorgon Meducer 傻孩子给看一下。谢谢!
#include "iom168v.h"
#include "stdio.h"
#include "math.h"
#include "string.h"
#include "macros.h"
#include "ctype.h"
#define uchar unsigned char
#define uint unsigned int
#pragma interrupt_handler USART_Transmit:20
#pragma interrupt_handler USART_Receive:19
volatile float height=2.0; //实际当前高度
volatile signed char h=12; //设定高度
void initialize(void);
void USART_Init(void);
void main(void)
{
initialize();
USART_Init();
while(1)
{
}
}
void initialize(void)
{
DDRB=(1<<PB0)|(1<<PB3)|(1<<PB5);
PORTB=(1<<PB3)|(1<<PB5);
DDRC=(1<<PC2)|(1<<PC3);
DDRD=(1<<PD1)|(1<<PD2)|(1<<PD6)|(1<<PD7);
PORTD=(1<<PD0)|(1<<PD1)|(1<<PD2);
}
void USART_Init(void)
{
UCSR0B = 0x00;
UCSR0A = 0x00;
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
UBRR0L = 0x33;
UBRR0H = 0x00;
UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0)|(1<<TXCIE0);
}
void USART_Receive(void)
{
h=UDR0;
}
void USART_Transmit(void)
{
UDR0=height;
}
以下蓝色文字由站长:armok 于:2009-01-18,19:57:02 加入。你的原标题:“<font color=black>请教Gorgon Meducer 傻孩子 一个问题” 不合符规定。请更改成能说明帖子大意的标题
试想一下,如果本论坛的帖子标题清一色的‘帮助!’,‘ADC求救!’等笼统的标题,你在阅读的过程中会造成许多麻烦。
所以本论坛规定:一定要起一个能说明帖子大意的标题。不允许“关于 AVR 的 ADC 使用!”这种笼统标题。作为标题,必须说明清楚:
①你是在请教问题,还是在介绍有关的知识?
②ADC的问题有许多,你是想说那方面的内容?
注意以上两点,标题应该改成如:“请教:ADC 可以不使用中断吗?”。
起一个能说明帖子大意的标题,除了减轻我们的帖子分类整理工作,还方便其它人阅读,节省大家的时间。
注:使用合格的标题,对你来说只是举手之劳,但却会为我们的管理工作提供很大的便利。谢谢你的支持。
./bbs_upload/files_6/armok01122228.gif 不客气。 谢谢Gorgon Meducer 傻孩子 !! ……果然是硬件问题…… 已经解决!
是串口封装做错了!
谢谢各位的关心!
谢谢!! 现在直接将与电脑相连的DB9的2和3脚短接,在串口调试助手里面发送数据,可是在串口调试助手里仍然收不到任何数据!
请教Gorgon Meducer 傻孩子
是什么原因呢?
谢谢! 【9楼】 jjj206
=======================
先将MAX232与单片机断开,然后短接单片机到MAX232端的发送和接受 【5楼】 sun_changdong
直接在物理上短接后,发送数据,可是还是没有返回.
我检查了硬件,也没有发现什么问题呀!
-------------------------------------------------------------------
你是短接哪里的引脚?
本贴被 jjj206 编辑过,最后修改时间:2009-01-18,18:10:44. 232芯片……电路……串口线或者D型口……都有可能……你可以通过
逐个短接的方法定位
1、先短接计算机出来的D型口里面的2、3脚,看看有无返回
2、短接MAX232芯片到PC的输出端
3、短接MAX232芯片与单片机连接的输入端…… 好的!
我再检查检查硬件!感觉硬件没有什么问题的呀?
谢谢!
根据您的经验,一般问题会出在什么地方?
奇怪! 如果短接TXD引脚和RXD引脚就形成了回路,如果无法有数据返回,就是硬件问题。
这一点毋庸置疑。请你仔细检查……不要在软件上浪费时间了。 直接在物理上短接TXD和RXD引脚后,发送数据,可是还是没有返回.
我检查了硬件,也没有发现什么问题呀! 如果发送后没有数据回来,直接在物理上短接TXD和RXD引脚,再通过上位机
法数据,如果无想通数据返回,则可确定是硬件问题。 Gorgon Meducer 傻孩子:
=============================
我按着你说的方法试了一下,发送后没有数据回发出来!
不知道是什么原因?
感觉这个地方真是奇怪! 好的!
我试试!
谢谢! 你的初始化代码是没有错的,但是从你的程序中,我无法看出,你有任何发送数据的
操作(没有发送过任何数据),接收的数据也没有任何显示……
你应该修改代码,在void USART_Receive()里面做一个回发操作:
unsigned char TempUDR = UDR0;
UDR0 = TempUDR;
然后再电脑上利用串口大师,以9600的波特率发送任意数据,看有没有同样的数据回发
回来……
页:
[1]