在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 3296|回复: 6

[转帖]单片机相关学习资料

[复制链接]
发表于 2005-6-28 14:27:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
单片机相关学习资料
AT89LP2052|AT89LP4052最新高速低功耗51单片机
Atmel Corporation今天宣佈推出其新的基于单周期 8051 核心 (Single-Cycle 8051 Core) 的 AT89LP 系列。新的系列产品速度较标准的8051核心快12倍,这一新的系列拓展了现有 8051 Flash 微控制器产品。  
    这些新设备针对要求低功耗并且需要在低成本的条件下实现高效能的应用产品而进行了最优化。2.0V 至 5.5V 的宽工作电压范围适用于功率管理、大型家电以及电池驱动的应用产品。  
    AT89LP 中央处理器 (CPU) 进行一次字节读取仅需一个时钟周期,而标准 8051 CPU 却需要12个时钟周期。AT89LP 核心在 20 MHz 的时钟频率下能达到 20 MIPS 的处理速度,而标准的8051架构在 20 MHz 时的处理速度低于 2 MIPS。相反,新的 AT89LP 核心能够以低得多的时钟频率提供与标准8051核心相同的 MIPS 处理速度,从而使能耗下降85%。  
    与标准8051指令组的二进制兼容性使设计者能够轻易地从多时钟周期的8051设备轻松移植至 AT89LP 系列,同时无需花费巨大且耗时的重新设计即可轻易更新其应用性能。该系列设备使设计者有机会获得更高的速度,或在维持软硬体兼容性的同时显着降低能耗。同时,该设备帮助设计者透过降低工作频率解决 EMC 问题。  
    AT89LP 系列包括具有2至 64Kb 的系统内可编程 Flash 记忆体的设备,并且提供从14针、20针、28针至44针不等的多种封装选择。它们包含芯片上 DataFlash(R)、10位 ADC、模拟比较器、脉沖宽度调节器、可编程的看门狗定时器、增强型通用异步收发器 (UART)、内部 RC 振荡器、非常适合功率管理的功能、发动机控制以及工业控制应用产品。  
    该系列最初的两款设备为 AT89LP2052 与 AT89LP4052。AT89LP2052 与 AT89LP4052採用20针 PDIP、TSSOP和SOIC包装,分别具有 2KB 和 4KB Flash 代码记忆体。此两件设备与现有 AT89C2051 和 AT89C4051 针脚兼容。2005年生产的样品已经推出。批量为10,000个单位的 AT89LP2052 和 AT89LP4052 的单价分别为0.85美元和0.99美元。

AT90S1200特点及功能简述
1. AVR RISC 结构
2. AVR 高性能低功耗RISC 结构
89 条指令大多数为单指令周期
32 个8 位通用工作寄存器
工作在1 2 M H z 时具有1 2 M I P S 的性能
3. 数据和非易失性程序内存
1K字节的在线可编程FLASH 擦除次数1000 次
64 字节在线可编程EEPROM 寿命100000 次
程序加密位
4. 外围Peripheral 特点
一个可预分频Prescale 的8 位定时器/计数器
片内模拟比较器
可编程的看门狗定时器由片内振荡器生成
用于下载程序的SPI 口
5. 特别的MCU特点
低功耗空闲和掉电模式
内外部中断源
可选的片内RC 振荡器
6. 规范Specification
低功耗高速CMOS 工艺
全静态工作
7. 4MHz 3V 25 条件下的功耗
工作模式2.0m A
空闲模式0.4m A
掉电模式< 1 A
8. I / O 和封装
15 个可编程的I / O 脚
20 脚P D I P 和S O I C 封装
9. 工作电压
2.7V-6.0V AT90S1200-4
4.0V-6.0V AT90S1200-12
10. 速度
0-4MHz AT90S1200-4
0-8MHz AT90S1200-12
描述
AT90S1200 是一款基于AVR RISC 的低功耗CMOS 的8 位单片机,通过在一个时钟周期内执行一条指令AT90S1200 可以取得接近1MIPS/MHz 的性能,从而使得设计人员可以在功耗和执行速度之间取得平衡,AVR 核将32 个工作寄存器和丰富的指令集联结在一起,所有的工作寄存器都与ALU 算逻单元直接相连,允许在一个时钟周期内执行的单条指令同时访问两个独立的寄存器,这种结构提高了代码效率,使AVR 得到了比普通CISC 单片机高将近10 倍的性能。
这种结构可以有效地支持高级语言编程,同时保持代码密度紧凑。
AT90S1200 具有以下特点:
1K字节FLASH, 64 字节EEPROM ,15 个通用I/0 口,32 个通用工作寄存器,内外中断源,可编程的看门狗定时器,下载程序用的SPI 口以及两种可通过软件选择的省电模式,工作于空闲模式时CPU 将停止运行而寄存器定时器/计数器看门狗和中断系统继续工作,掉电模式时振荡器停止工作所有功能都被禁止而寄存器内容得到保留只有外部中断或硬件复位才可以退出此状,态器件是以ATMEL 的高密度非易失性内存技术生产的片内FLASH ,允许多次编程,通过将增强的RISC 8 位CPU 与FLASH 集成在一个芯片内,为许多嵌入式控制应用提供了灵活而低成本的方案,AT90S1200 具有一整套的编程和系统开发工具宏汇编调试/仿真器在线仿真器和评估板。
AT89C2051设计的PC/AT键盘


作 者: 海军航空工程学院分院 杨日杰 张宗玉
摘 要: 在介绍PC/AT键码特征的基础上,介绍利用AT89C2051来实现PC/AT键盘的硬件和软件设计 方法。它具有结构简单、选择性强、便于实现等优点,特别适用于36个以下PC/AT键盘的 应用。
关键词:键盘 键码 微控制器
在工业控制、测量仪器等领域,已大量使用嵌入式PC,如 ADVANTECH公司的PC/104、AMD公司的E86嵌入式PC等。它们除具有 PC的功能外,还提供了功能强大的各种标准接口,如:平板 /VGA显示器控制接口、光驱接口、以太网接口、RS-232/422/485 接口、PC/AT键盘接口等 。这就为新产品开发的标准化、模块化提供了方便,可大大缩小研发周期,降 低研制成本,快速进入市场。由于嵌入式PC具有标准PC/AT 键盘接口,也就是说,可以用标准的PC/AT键盘来对嵌入式 PC进行操作与控制。但是,在很多实际应用中,由于一般只用到某几个固定的键,并希望键盘 具有体积小巧、便于布放等特点,为此,希望能够设计一种小巧、灵活的 PC/AT键盘,来满足各种需求。本文介绍一种由AT89C2051设计实现的 PC/AT键盘。
1 PC/AT键盘的特点
PC/AT键盘由单片微控制器、键盘矩阵和支持逻辑三部分组成。键盘微控制器的主要功能是扫描 键盘,以得到有效的闭合键,一旦键被按下或放开,就为系统板产生键代码,将键代码以串行格式 传递到系统板,同时产生将键代码转换为供系统板使用的并行数据所需的时钟信号。 AT键盘使用接通键码,其值在00~7F之间,以串行数据格式传递 到系统板;每发送一个键码包含11个数据位,即1个起始位、 8个数据位(低位在前,高位在后)、1个奇偶校验位、1个停止位。在键码传送的同时, 微控制器还传送1个键码时钟同步信号,用于同步键码数据的接收。键码中每个数据位的传送发生在 键盘时钟的下降沿,时钟的波特率为16 Kb/s。图1为接通键码是2C,即按下t键时,键码的传送格式。

  对于PC/AT键盘,如果按下键0.5 s之前放开该键,则键盘电路产生一个断开键码,将这个键码也 以串行数据的格式传送出去。AT键盘的断开键码为F0,在断开键码之后再跟接通键码。其中断开键 码通知BIOS键盘例程,按下的键序列功能已结束,键已被放开。如果在键按下 0.5 s之后仍未放开该键,则键盘电路产生一个接通键代码(与接通键码 相同),并以每秒6个键码的速率(每166.7 ms一个键码)进行传送,此过程直到键盘电路检测到断开代码为止。常用键的键码如表 1所列。

2 硬件设计
  键盘电路如图2所示,由ATMEL公司的微控制器AT89C2051 、MAXIM 公司的看门狗自动复位电路MAX813L及键盘矩阵组成。由于AT 89C2051的可用端口为16个,除复位端RES、看门狗信号输出 端WDI、键码数据输出端TXD和时钟输出端CLK外,还剩12个可用端口,这样,其最大可独立响 应6×6=36个键的输入,可满足工控机常用控制键的要求。 MAX813L为看门狗电路,它实时接收来自AT89C2051的WDI信号,并自动判断两次 WDI信号的间隔时间。当时间间隔小于1.6 s时,其RST输出端保持低电平;当时间间隔大于1.6 s时,其RST输出端输出高电平,AT89C2051被复位。AT89C2051 具有如下特点:
◇ 具有2K字节可编程闪存;
◇ 128×8bit 内部RAM;
◇ 15根可编程I/O线;
◇ 2个16位定时/计数器;
◇ 6个中断源;
◇ 可编程串行UART。

3 软件设计
软件包括定时0中断子程序、定时1中断子程序、主程序等。其中,定时器0定时中断子程序用 于定时检测有无键被按下、判断哪个键被按下并确定对应的键码。定时器 1定时中断子程序用于确定输出键码和时钟信号的波特率,并定时输出看门狗 信号,用于防止软件出现死机现象。主程序根据有无键被按下标志,确定是否输出键码和同步时钟信 号。如有键被按下,则调入由定时中断子程序所确定的键码,输出相应的键码并同时输出同步时钟信 号。主程序流程如图3所示。

4 设计实例
下面为一设计实例,要求所设计的小键盘输出F1、F2、 F3、F4、Page UP、Page Down、Esc、En ter 8个PC/AT PS/2键盘信号。8个按键的一端分别接P3.7、P1.0~P1.6端口,8个按键的另一端为公共 接地端。
全部程序如下所示:
/* CRYSTAL IS  20MHz, keycode clock is 12.5kHz,*/
KEY: DO;
$NOLIST
$INCLUDE (REG51.DCL)
$LIST
DECLARE WDI LITERALLY 'P3_0';
DECLARE SW1 LITERALLY 'P3_7';
DECLARE SW2 LITERALLY 'P1_0';
DECLARE SW3 LITERALLY 'P1_1';
DECLARE SW4 LITERALLY 'P1_2';
DECLARE SW5 LITERALLY 'P1_3';
DECLARE SW6 LITERALLY 'P1_4';
DECLARE SW7 LITERALLY 'P1_5';
DECLARE SW8 LITERALLY 'P1_6';
DECLARE KEY$DATA LITERALLY 'P3_1';
DECLARE KEY$CLK LITERALLY 'P1_7';
DECLARE (DK,KEY$CODE,PARITY,SHIFT$REG,NUMBER,DI,DN) BYTE;
DECLARE (T0$INT) BIT;
/******* INTERRUPT OF TIMER 1 ********/
TIMER1ROCEDURE INTERRUPT 3 USING 1;
DISABLE;
WDI=1;
DK=0;
TH1=0BEH;
TL1=0E6H;
DN=800;
IF SW1=0 THEN
DO;
DI=DN;
DO WHILE DI>0;
DI=DI-1;
END;
IF SW1=0 THEN DK=1;
KEY$CODE=5AH;  /*Enter*/
PARITY=0FFH;
END;

IF SW2=0 THEN
DO;
DI=DN;
DO WHILE DI>0;
DI=DI-1;
END;
IF SW2=0 THEN
DO;
DK=2;
KEY$CODE=76H; /*Esc*/
PARITY=00H;
END;

IF SW3=0 THEN
DO;
DI=DN;
DO WHILE DI>0;
DI=DI-1;
END;
IF SW3=0 THEN DK=3;
KEY$CODE=75H;    /*8/up*/
PARITY=00H;
END;

IF SW4=0 THEN
DO;
DI=DN;
DO WHILE DI>0;
DI=DI-1;
END;
IF SW4=0 THEN DK=4;
KEY$CODE=72H;     /*2/down*/
PARITY=0FFH;
END;

IF SW5=0 THEN
DO;
DI=DN;
DO WHILE DI>0;
DI=DI-1;
END;
IF SW5=0 THEN DK=5;
KEY$CODE=06H;    /*F2*/
PARITY=0FFH;
END;

IF SW6=0 THEN
DO;
DI=DN;
DO WHILE DI>0;
DI=DI-1;
END;
IF SW6=0 THEN DK=6;
KEY$CODE=04H;  /*F3*/
PARITY=00H;
END;

IF SW7=0 THEN
DO;
DI=DN;
DO WHILE DI>0;
DI=DI-1;
END;
IF SW7=0 THEN DK=7;
KEY$CODE=0CH;    /*F4*/
PARITY=0FFH;
END;

IF SW8=0 THEN
DO;
DI=DN;
DO WHILE DI>0;
DI=DI-1;
END;
IF SW8=0 THEN DK=8;
KEY$CODE=05H;     /*F1*/
PARITY=0FFH;
END;
WDI=0;
DN=0;

T1$RET:   ENABLE;
END;
/****INTERRUPT OF TIMER 0****/
TIMER0ROCEDURE INTERRUPT 1 USING 2;
DISABLE;
WDI=1;
IF NUMBER=0 THEN
DO;
KEY$CLK=0;
KEY$DATA=1;
END;
ELSE
DO;
KEY$CLK=1;
DI=4;
DO WHILE DI>0;
DI=DI-1;
END;
IF (SHIFT$REG AND 01H)=0 THEN KEY$DATA=0;
IF (SHIFT$REG AND 01H)=1 THEN KEY$DATA=1;
DI=4;
DO WHILE DI>0;
DI=DI-1;
END;
KEY$CLK=0;
NUMBER=NUMBER-1;
END;

T0$RET:T0$INT=1;
WDI=0;
ENABLE;
END;
/*************MAIN PROGRAM***********/
MAIN_PRG:SW1=1;             /**** INIT PORT ****/
SW2=1;
SW3=1;
SW4=1;
SW5=1;
SW6=1;
SW7=1;
SW8=1;
KEY$CLK=0;
KEY$DATA=0;
KEY$CODE=00H;
PARITY=00H;
SHIFT$REG=00H;
NUMBER=11;
T0$INT=0;
DK=0;
DI=0;
DN=0;
TMOD=10H;           /*T1 MODE 1*/
IE=0C8H;           /****T1 interrupt enable ****
TCON=40H;         /****T1 begin work  ****/
TH1=0BEH;            /*T1 100Hz */
TL1=0E6H;
TH0=7BH;             /*T0 16kHz*/
TL0=7BH;
ENABLE;
MAIN$LOOP:IF DK=0 THEN GOTO MAIN$END;
TMOD=02H;        /*T0 BEGIN WORK*/
IE=0C2H;         /*T1 STOP WORK*/
TCON=10H;
T0$INT=0;
SHIFT$REG=00H;
WAIT1:IF T0$INT=0 THEN GOTO WAIT1;   /*send S bit*/
T0$INT=0;
SHIFT$REG=KEY$CODE;
WAIT2:IF T0$INT=0 THEN GOTO WAIT2;   /*send Key$code*/
SHIFT$REG=SHR(SHIFT$REG,1);
T0$INT=0;
IF NUMBER>2 THEN GOTO WAIT2;
SHIFT$REG=PARITY;
WAIT3:IF T0$INT=0 THEN GOTO WAIT3;   /*send parity bit*/
T0$INT=0;
SHIFT$REG=0FFH;
WAIT4:IF T0$INT=0 THEN GOTO WAIT4;   /*send ST bit*/
T0$INT=0;
DK=0;
WAIT5:IF T0$INT=0 THEN GOTO WAIT5;              /* KEY$CLK=0 for 300us*/
T0$INT=0;
DK=DK+1;
IF DK<4 THEN GOTO WAIT5;
/****************SEND 0F0H**************/
KEY$CLK=1;
KEY$DATA=1;
T0$INT=0;
DK=0;
IE=00H;            /*T0 STOP WORK*/
TCON=00H
TMOD=10H;           /*T1 BEGAN WORK*/
IE=0C8H;
TCON=40H;
TH1=0BEH;
TL1=0E6H;
CALL TIME(200);
TMOD=02H;        /*T0 BEGIN WORK*/
IE=0C2H;         /*T1 STOP WORK*/
TCON=10H;
T0$INT=0;
NUMBER=11;
T0$INT=0;
SHIFT$REG=00H;
WAIT11:IF T0$INT=0 THEN GOTO WAIT11;   /*send S bit*/
T0$INT=0;
SHIFT$REG=0F0H;
WAIT12:IF T0$INT=0 THEN GOTO WAIT12;   /*send 0F0H code*/
SHIFT$REG=SHR(SHIFT$REG,1);
T0$INT=0;
IF NUMBER>2 THEN GOTO WAIT12;
SHIFT$REG=0FFH;
WAIT13:IF T0$INT=0 THEN GOTO WAIT13;   /*send parity bit*/
T0$INT=0;
SHIFT$REG=0FFH;
WAIT14:IF T0$INT=0 THEN GOTO WAIT14;   /*send ST bit*/
T0$INT=0;
DK=0;
WAIT15:IF T0$INT=0 THEN GOTO WAIT15;              /* KEY$CLK=0 for 300us*/
T0$INT=0
DK=DK+1;
IF DK<4 THEN GOTO WAIT15;
/***************SEND KEY$CODE******************/
KEY$CLK=1;
KEY$DATA=1;
T0$INT=0;
DK=0;
IE=00H;            /*T0 STOP WORK*/
TCON=00H;
TMOD=10H;           /*T1 BEGAN WORK*/
IE=0C8H;
TCON=40H;
TH1=0BEH;
TL1=0E6H;
CALL TIME(200);
TMOD=02H;        /*T0 BEGIN WORK*/
IE=0C2H;         /*T1 STOP WORK*/
TCON=10H;
T0$INT=0;
NUMBER=11;
T0$INT=0;
SHIFT$REG=00H;
WAIT21:IF T0$INT=0 THEN GOTO WAIT21;   /*send S bit*/
T0$INT=0;
SHIFT$REG=KEY$CODE;
WAIT22:T0$INT=0 THEN GOTO WAIT22;   /*send Key$code*/
SHIFT$REG=SHR(SHIFT$REG,1);
T0$INT=0;
IF NUMBER>2 THEN GOTO WAIT22;
SHIFT$REG=PARITY;
WAIT23:IF  T0$INT=0 THEN GOTO WAIT23;   /*send parity bit*/
T0$INT=0;
SHIFT$REG=0FFH;
WAIT24:IF T0$INT=0 THEN GOTO WAIT24;   /*send ST bit*/
T0$INT=0;
DK=0;
WAIT25:IF T0$INT=0 THEN GOTO WAIT25;              /* KEY$CLK=0 for 300us*/
T0$INT=0;
DK=DK+1;
IF DK<4 THEN GOTO WAIT25;
KEY$CLK=1;
KEY$DATA=1;
T0$INT=0;
DK=0;
IE=00H;            /*T0 STOP WORK*/
TCON=00H;
DO DI=1 TO 300;      /*DELAY TIME*/
CALL TIME(20);
END;
MAIN$END:KEY$CLK=1;
KEY$DATA=1;
NUMBER=11;
SHIFT$REG=0;
GOTO MAIN$LOOP;
END KEY;
本文介绍的PC/AT键盘具有结构简单、设计灵活性强、易于编程、体积小、成本低的特点,并可 根据用户需要随意设计和布放,对使用工控机的各种测试与控制仪器具有通用性。
来源:强力单片机技术项目交易网
http://www.qlmcu.com/


发表于 2005-9-7 16:33:01 | 显示全部楼层

[转帖]单片机相关学习资料

支持一下
发表于 2005-9-8 16:53:22 | 显示全部楼层

[转帖]单片机相关学习资料

支持一下,我顶...
发表于 2007-6-10 02:35:23 | 显示全部楼层
这个可是难得的资料啊
发表于 2007-6-10 02:37:09 | 显示全部楼层
支持!囊中羞涩呀
发表于 2007-6-10 02:40:59 | 显示全部楼层
太伟大了谢谢楼主啊
发表于 2007-6-13 13:25:47 | 显示全部楼层
支持!
ddddddddddddddddddddddd
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-16 19:49 , Processed in 0.024753 second(s), 12 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表