psb,固定接地,cs(RS)固定接高,
Atmega16:sid(RW)接ATMega16 的portb1,scl(E)接ATMega16 的portb0, rst,A,K都接的正确
可以确定硬件接口连接都正确,程序正确,延时也是对的,在1Mhz,4Mhz时钟下都能在M16上运行出来,
ATmega8:上的portc5接scl,portc6接sid,熔丝位设置时rstdisbl=0,portc6做I/0用,把头文件改成m8的,scl,sid接口改掉,程序烧到片上,死活不成功,急啊
一下是ATMega16上的C程序
//ICC-AVR application builder : 2012-3-21 下午 10:18:40
// Target : M16
// Crystal: 4.0000Mhz
#include
#include
#define SET_SCL() PORTB|=(1<
#define SET_SID() PORTB|=(1<
void Write_Byte(unsigned char); //写一个字节
void Write_Command(unsigned char); //写一个字节数据到LCD指令寄存器
void Write_Char(unsigned char); //写一个字符到资料寄存器
void Init_Lcd(void); //LCD 初始化函数
void Delay_Ms(void); //4Mhz下延时一个ms的函数
void Write_Byte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(dat&0x80)//dat最高位是1
{
SET_SID();
}
else
{
CLR_SID();
}
CLR_SCL();
NOP();
NOP();
NOP();
SET_SCL();
dat<<=1;
}
Delay_Ms();
Delay_Ms();
}
void Write_Command(unsigned char comm)
{
//一:先要写入同步字 0b 11111 1,0,Rs,0 rs=0写指令 rs=1写资料
Write_Byte(0xf8);
//二:先写命令高四位,后四位补零
Write_Byte(comm&0xf0);
//三:在写命令低四位,后四位补零
Write_Byte(comm<<4);
}
void Write_Char(unsigned char dat)
{
//一:先要写入同步字 0b 11111 1,0,Rs,0 rs=0写指令 rs=1写资料
Write_Byte(0xfa);
//二:先写命令高四位,后四位补零
Write_Byte(dat&0xf0);
//三:在写命令低四位,后四位补零
Write_Byte(dat<<4);
}
void Init_Lcd()
{
Write_Command(0x30);
Delay_Ms();
Write_Command(0x04);
Delay_Ms();
Write_Command(0x0c);
Delay_Ms();
Write_Command(0x01);
Delay_Ms();
Write_Command(0x02);
Delay_Ms();
Write_Command(0x80);
Delay_Ms();
Write_Char(0x70);
Write_Char(0x71);
Write_Char(0x72);
Write_Char(0x73);
}
//大概延时1ms以上
void Delay_Ms()
{
unsigned char i=100;
unsigned char k=100;
while(i--)
{
while(k--);
}
}
void Io_Init()
{
}
void main(void)
{
DDRB=0xff;
Init_Lcd();
while(1);
}
Atmega8,Atmega16都是一个系列的,指令完全兼容,书上说的,程序移植时要注意什么问题吗?
问题解决,原来Mega8芯片也有坏的,而且不止一个,都被我用上了