关于作者

用户名:lieastlong
笔名:lizhiyuan
地区: 北京-昌平
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言


友情博客

点击这里给我发消息

公告

入门开发板

访问统计:
文章个数:122
评论个数:838
留言条数:47




Powered by BlogDriver 2.1

单片机嵌入式学习

 

更多单片机嵌入式学习资料下载
>http://www.99daili.com

文章

最近没有时间更新,以后继续  (作者置顶)
我这里资料比较多,但是时间也不多,希望大家给提个好建议,方便共享和交流。

另外准备自己作些实物的东西,大家有什么需要的可以告诉我。

- 作者: lizhiyuan 2007年09月21日, 星期五 14:11  回复(2) |  引用(0) 加入博采

承接单片机嵌入式系统的设计开发  (作者置顶)
摘要:承接单片机嵌入式系统的设计开发 查看全文

- 作者: lizhiyuan 2007年07月21日, 星期六 17:12  回复(0) |  引用(0) 加入博采

ds18b20的完整程序(asm51)  (作者置顶)
 ds18b20的完整程序(asm51)

///汇编源程序!!

晶振:12M
TEMPER_L EQU 36H
TEMPER_H EQU 35H
TEMPER_NUM EQU 60H
FLAG1 BIT 00H
DQ BIT P3.3

AAA:MOV SP,#70H
LCALL GET_TEMPER
LCALL TEMPER_COV
LJMP AAA
NOP
------------------读出转换后的温度值
GET_TEMPER:
SETB DQ 定时入口
BCD:LCALL INIT_1820
JB FLAG1,S22
LJMP BCD 若DS18B20不存在则返回

S22:LCALL DELAY1
MOV A,#0CCH 跳过ROM匹配------0CC
LCALL WRITE_1820
MOV A,#44H 发出温度转换命令
LCALL WRITE_1820
NOP
LCALL DELAY
LCALL DELAY
CBA:LCALL INIT_1820
JB FLAG1,ABC
LJMP CBA
ABC:LCALL DELAY1
MOV A,#0CCH 跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH 发出读温度命令
LCALL WRITE_1820
LCALL READ_18200 READ_1820
RET
------------------读DS18B20的程序,从DS18B20中读出一个字节的数据
READ_1820:
MOV R2,#8
RE1:
CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#7
DJNZ R3,$
MOV C,DQ
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE1
RET

-------------------写DS18B20的程序
WRITE_1820:
MOV R2,#8
CLR C
WR1:
CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET
-------------------读DS18B20的程序,从DS18B20中读出两个字节的温度数据
READ_18200:
MOV R4,#2 将温度高位和低位从DS18B20中读出
MOV R1,#36H 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
RE00:
MOV R2,#8
RE01:
CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#7
DJNZ R3,$
MOV C,DQ
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET

-------------------将从DS18B20中读出的温度数据进行转换
TEMPER_COV:
MOV A,#0F0H
ANL A,TEMPER_L 舍去温度低位中小数点后的四位温度数值
SWAP A
MOV TEMPER_NUM,A
MOV A,TEMPER_L
JNB ACC.3,TEMPER_COV1 四舍五入去温度值
INC TEMPER_NUM

TEMPER_COV1:
MOV A,TEMPER_H
ANL A,#07H
SWAP A
ORL A,TEMPER_NUM
MOV TEMPER_NUM,A 保存变换后的温度数据
LCALL BIN_BCD
RET
-------------------将16进制的温度数据转换成压缩BCD码
BIN_BCD:
MOV DPTR,#TEMP_TAB
MOV A,TEMPER_NUM
MOVC A,@A+DPTR
MOV TEMPER_NUM,A
RET

TEMP_TAB:
DB 00H,01H,02H,03H,04H,05H,06H,07H
DB 08H,09H,10H,11H,12H,13H,14H,15H
DB 16H,17H,18H,19H,20H,21H,22H,23H
DB 24H,25H,26H,27H,28H,29H,30H,31H
DB 32H,33H,34H,35H,36H,37H,38H,39H
DB 40H,41H,42H,43H,44H,45H,46H,47H
DB 48H,49H,50H,51H,52H,53H,54H,55H
DB 56H,57H,58H,59H,60H,61H,62H,63H
DB 64H,65H,66H,67H,68H,69H,70H,71H
DB 72H,73H,74H,75H,76H,77H,78H,79H
DB 80H,81H,82H,83H,84H,85H,86H,87H
DB 88H,89H,90H,91H,92H,93H,94H,95H
DB 96H,97H,98H,99H

-------------------DS18B20初始化程序
INIT_1820:
SETB DQ
NOP
CLR DQ
MOV R0,#80H
TSR1:
DJNZ R0,TSR1 延时
SETB DQ
MOV R0,#25H 96US-25H
TSR2:
DJNZ R0,TSR2
JNB DQ,TSR3
LJMP TSR4 延时
TSR3:
SETB FLAG1 置标志位,表示DS1820存在
LJMP TSR5
TSR4:
CLR FLAG1 清标志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#06BH 200US
TSR6:
DJNZ R0,TSR6 延时
TSR7:
SETB DQ
RET
------------------重新写DS18B20暂存存储器设定值
RE_CONFIG:
JB FLAG1,RE_CONFIG1 若DS18B20存在,转RE_CONFIG1
RET
RE_CONFIG1:
MOV A,#0CCH 发SKIP ROM命令
LCALL WRITE_1820
MOV A,#4EH 发写暂存存储器命令
LCALL WRITE_1820

MOV A,#00H TH(报警上限)中写入00H
LCALL WRITE_1820
MOV A,#00H TL(报警下限)中写入00H
LCALL WRITE_1820
MOV A,#7FH 选择12位温度分辨率
LCALL WRITE_1820
RET
------------------延时子程序
DELAY:MOV R7,#00H
MIN:DJNZ R7,YS500
RET
YS500:LCALL YS500US
LJMP MIN
YS500US:MOV R6,#00H
DJNZ R6,$
RET
DELAY1:MOV R7,#20H
DJNZ R7,$
RET

- 作者: lizhiyuan 2007年07月13日, 星期五 12:50  回复(0) |  引用(0) 加入博采

ds18b20的完整程序  (作者置顶)
荐:ds18b20的完整程序(c51)(sparkstar)

//DS1820 C51 子程序
//这里以11.0592M晶体为例,不同的晶体速度可能需要调整延时的时间
//sbit DQ =P2^1;//根据实际情况定义端口

typedef unsigned char byte;
typedef unsigned int word;

//延时
void delay(word useconds)
{
for(;useconds>0;useconds--);
}

//复位
byte ow_reset(void)
{
byte presence;
DQ = 0; //pull DQ line low
delay(29); // leave it low for 480us
DQ = 1; // allow line to return high
delay(3); // wait for presence
presence = DQ; // get presence signal
delay(25); // wait for end of timeslot
return(presence); // presence signal returned
} // 0=presence, 1 = no part

//从 1-wire 总线上读取一个字节
byte read_byte(void)
{
byte i;
byte value = 0;
for (i=8;i>0;i--)
{
value>>=1;
DQ = 0; // pull DQ low to start timeslot
DQ = 1; // then return high
delay(1); //for (i=0; i<3; i++);
if(DQ)value|=0x80;
delay(6); // wait for rest of timeslot
}
return(value);
}

//向 1-WIRE 总线上写一个字节
void write_byte(char val)
{
byte i;
for (i=8; i>0; i--) // writes byte, one bit at a time
{
DQ = 0; // pull DQ low to start timeslot
DQ = val&0x01;
delay(5); // hold value for remainder of timeslot
DQ = 1;
val=val/2;
}
delay(5);
}

//读取温度
char Read_Temperature(void)
{
union{
byte c[2];
int x;
}temp;

ow_reset();
write_byte(0xCC); // Skip ROM
write_byte(0xBE); // Read Scratch Pad
temp.c[1]=read_byte();
temp.c[0]=read_byte();
ow_reset();
write_byte(0xCC); //Skip ROM
write_byte(0x44); // Start Conversion
return temp.x/2;
}

- 作者: lizhiyuan 2007年07月13日, 星期五 12:48  回复(0) |  引用(0) 加入博采

用C51实现单片机的中文输法  (作者置顶)

用C51实现单片机的中文输法

说明:
拼音输入法杳询函数: unsigned char code * py_ime(unsigned char input_py_val[]);
input_py_val为已输入的拼音码字符串头指针,反回值为中文的起始地址,当为0时,杳询失败
应用举例:
{
unsigned char input_string[]={"bang"};
unsigned char chines_string[100];
sprintf(chines_string,"%s",py_ime(input_string));

 

C51程序:

//"********************CCDC01采集器测试仪软件:拼音输入法模块******************"
//"* 软件设计:张 凯 *"
//"* 日期: 2001/3 *"
//"* 编译环境:Franklin 3.3.4 *"
//"**************************************************************************"

#i nclude <string.h>
#i nclude <reg51.h>

//"********************CCDC01采集器测试仪软件:拼音输入法码表*****************"
//"* 软件设计:张 凯 *"
//"* 日期: 2001/3 *"
//"* 编译环境:Franklin 3.3.4 *"
//"*************************************************************************"

//"拼音输入法汉字排列表"
unsigned char code PY_mb_a []={"阿啊"};
unsigned char code PY_mb_ai []={"哎哀唉埃挨皑癌矮蔼艾爱隘碍"};
unsigned char code PY_mb_an []={"安氨鞍俺岸按案胺暗"};
unsigned char code PY_mb_ang []={"肮昂盎"};
unsigned char code PY_mb_ao []={"凹敖熬翱袄傲奥澳懊"};
unsigned char code PY_mb_ba []={"八巴叭扒吧芭疤捌笆拔跋把靶坝爸罢霸"};
unsigned char code PY_mb_bai []={"白百佰柏摆败拜稗"};
unsigned char code PY_mb_ban []={"扳班般颁斑搬板版办半伴扮拌绊瓣"};
unsigned char code PY_mb_bang []={"邦帮梆绑榜膀蚌傍棒谤磅镑"};
unsigned char code PY_mb_bao []={"包苞胞褒雹宝饱保堡报抱豹鲍暴爆剥薄瀑"};
unsigned char code PY_mb_bei []={"卑杯悲碑北贝狈备背钡倍被惫焙辈"};
unsigned char code PY_mb_ben []={"奔本苯笨夯"};
unsigned char code PY_mb_beng []={"崩绷甭泵迸蹦"};
unsigned char code PY_mb_bi []={"逼鼻比彼笔鄙币必毕闭庇毖陛毙敝痹蓖弊碧蔽壁避臂"};
unsigned char code PY_mb_bian []={"边编鞭贬扁卞便变遍辨辩辫"};
unsigned char code PY_mb_biao []={"彪标膘表"};
unsigned char code PY_mb_bie []={"憋鳖别瘪"};
unsigned char code PY_mb_bin []={"宾彬斌滨濒摈"};
unsigned char code PY_mb_bing []={"冰兵丙秉柄炳饼并病"};
unsigned char code PY_mb_bo []={"拨波玻钵脖菠播伯驳帛泊勃铂舶博渤搏箔膊卜"};
unsigned char code PY_mb_bu []={"补哺捕不布步怖部埠簿"};
unsigned char code PY_mb_ca []={"擦"};
unsigned char code PY_mb_cai []={"猜才材财裁采彩睬踩菜蔡"};
unsigned char code PY_mb_can []={"参餐残蚕惭惨灿"};
unsigned char code PY_mb_cang []={"仓沧苍舱藏"};
unsigned char code PY_mb_cao []={"操糙曹槽草"};
unsigned char code PY_mb_ce []={"册侧厕测策"};
unsigned char code PY_mb_ceng []={"层蹭曾"};
unsigned char code PY_mb_cha []={"叉插查茬茶搽察碴岔诧差刹"};
unsigned char code PY_mb_chai []={"拆柴豺"};
unsigned char code PY_mb_chan []={"掺搀谗馋缠蝉产铲阐颤"};
unsigned char code PY_mb_chang []={"昌猖肠尝偿常厂场敞畅倡唱"};
unsigned char code PY_mb_chao []={"抄钞超巢朝嘲潮吵炒绰"};
unsigned char code PY_mb_che []={"车扯彻掣撤澈"};
unsigned char code PY_mb_chen []={"郴尘臣忱沉辰陈晨衬趁"};
unsigned char code PY_mb_cheng []={"称撑成呈承诚城乘惩程澄橙逞骋秤"};
unsigned char code PY_mb_chi []={"吃痴弛池驰迟持尺侈齿耻斥赤炽翅"};
unsigned char code PY_mb_chong []={"充冲虫崇宠"};
unsigned char code PY_mb_chou []={"抽仇绸畴愁稠筹酬踌丑瞅臭"};
unsigned char code PY_mb_chu []={"出初除厨滁锄雏橱躇础储楚处搐触矗畜"};
unsigned char code PY_mb_chuai []={"揣"};
unsigned char code PY_mb_chuan []={"川穿传船椽喘串"};
unsigned char code PY_mb_chuang[]={"闯疮窗床创"};
unsigned char code PY_mb_chui []={"吹炊垂捶锤"};
unsigned char code PY_mb_chun []={"春椿纯唇淳醇蠢"};
unsigned char code PY_mb_chuo []={"戳"};
unsigned char code PY_mb_ci []={"疵词茨瓷慈辞磁雌此次刺赐"};
unsigned char code PY_mb_cong []={"囱从匆葱聪丛"};
unsigned char code PY_mb_cou []={"凑"};
unsigned char code PY_mb_cu []={"粗促醋簇"};
unsigned char code PY_mb_cuan []={"蹿窜篡"};
unsigned char code PY_mb_cui []={"崔催摧脆淬瘁粹翠"};
unsigned char code PY_mb_cun []={"村存寸"};
unsigned char code PY_mb_cuo []={"搓磋撮挫措错"};
unsigned char code PY_mb_da []={"搭达答瘩打大"};
unsigned char code PY_mb_dai []={"呆歹傣代带待怠殆贷袋逮戴"};
unsigned char code PY_mb_dan []={"丹单担耽郸胆掸旦但诞弹惮淡蛋氮"};
unsigned char code PY_mb_dang []={"当挡党荡档"};
unsigned char code PY_mb_dao []={"刀导岛倒捣祷蹈到悼盗道稻"};
unsigned char code PY_mb_de []={"得德的"};
unsigned char code PY_mb_deng []={"灯登蹬等邓凳瞪"};
unsigned char code PY_mb_di []={"低堤滴狄迪敌涤笛嫡底抵地弟帝递第缔蒂"};
unsigned char code PY_mb_dian []={"掂滇颠典点碘电佃甸店垫惦淀奠殿靛"};
unsigned char code PY_mb_diao []={"刁叼凋碉雕吊钓掉"};
unsigned char code PY_mb_die []={"爹跌迭谍叠碟蝶"};
unsigned char code PY_mb_ding []={"丁叮盯钉顶鼎订定锭"};
unsigned char code PY_mb_diu []={"丢"};
unsigned char code PY_mb_dong []={"东冬董懂动冻侗恫栋洞"};
unsigned char code PY_mb_dou []={"都兜斗抖陡豆逗痘"};
unsigned char code PY_mb_du []={"督毒读犊独堵赌睹妒杜肚度渡镀"};
unsigned char code PY_mb_duan []={"端短段断缎锻"};
unsigned char code PY_mb_dui []={"堆队对兑"};
unsigned char code PY_mb_dun []={"吨敦墩蹲盾钝顿遁"};
unsigned char code PY_mb_duo []={"多哆夺掇朵垛躲剁堕舵惰跺"};
unsigned char code PY_mb_e []={"讹俄娥峨鹅蛾额厄扼恶饿鄂遏"};
unsigned char code PY_mb_en []={"恩"};
unsigned char code PY_mb_er []={"儿而尔耳洱饵二贰"};
unsigned char code PY_mb_fa []={"发乏伐罚阀筏法珐"};
unsigned char code PY_mb_fan []={"帆番翻藩凡矾钒烦樊繁反返犯泛饭范贩"};
unsigned char code PY_mb_fang []={"方坊芳防妨房肪仿访纺放"};
unsigned char code PY_mb_fei []={"飞非啡菲肥匪诽吠废沸肺费"};
unsigned char code PY_mb_fen []={"分吩纷芬氛酚坟汾焚粉份奋忿愤粪"};
unsigned char code PY_mb_feng []={"丰风枫封疯峰烽锋蜂冯逢缝讽凤奉"};
unsigned char code PY_mb_fo []={"佛"};
unsigned char code PY_mb_fou []={"否"};
unsigned char code PY_mb_fu []={"夫肤孵敷弗伏扶拂服俘氟浮涪符袱幅福辐抚甫府斧俯釜辅腑腐父讣付妇负附咐阜复赴副傅富赋缚腹覆"};
unsigned char code PY_mb_ga []={"嘎噶"};
unsigned char code PY_mb_gai []={"该改钙盖溉概"};
unsigned char code PY_mb_gan []={"干甘杆肝柑竿秆赶敢感赣"};
unsigned char code PY_mb_gang []={"冈刚岗纲肛缸钢港杠"};
unsigned char code PY_mb_gao []={"皋羔高膏篙糕搞稿镐告"};
unsigned char code PY_mb_ge []={"戈疙哥胳鸽割搁歌阁革格葛隔个各铬咯"};
unsigned char code PY_mb_gei []={"给"};
unsigned char code PY_mb_gen []={"根跟"};
unsigned char code PY_mb_geng []={"更庚耕羹埂耿梗"};
unsigned char code PY_mb_gong []={"工弓公功攻供宫恭躬龚巩汞拱共贡"};
unsigned char code PY_mb_gou []={"勾沟钩狗苟构购垢够"};
unsigned char code PY_mb_gu []={"估咕姑孤沽菇辜箍古谷股骨蛊鼓固故顾雇"};
unsigned char code PY_mb_gua []={"瓜刮剐寡挂褂"};
unsigned char code PY_mb_guai []={"乖拐怪"};
unsigned char code PY_mb_guan []={"关观官冠棺馆管贯惯灌罐"};
unsigned char code PY_mb_guang []={"光广逛"};
unsigned char code PY_mb_gui []={"归圭龟规闺硅瑰轨诡癸鬼刽柜贵桂跪"};
unsigned char code PY_mb_gun []={"辊滚棍"};
unsigned char code PY_mb_guo []={"郭锅国果裹过"};
unsigned char code PY_mb_ha []={"蛤哈"};
unsigned char code PY_mb_hai []={"孩骸海亥骇害氦"};
unsigned char code PY_mb_han []={"酣憨含邯函涵寒韩罕喊汉汗旱悍捍焊憾撼翰"};
unsigned char code PY_mb_hang []={"杭航行"};
unsigned char code PY_mb_hao []={"毫豪嚎壕好郝号浩耗"};
unsigned char code PY_mb_he []={"呵喝禾合何和河阂核荷涸盒菏贺褐赫鹤"};
unsigned char code PY_mb_hei []={"黑嘿"};
unsigned char code PY_mb_hen []={"痕很狠恨"};
unsigned char code PY_mb_heng []={"亨哼恒横衡"};
unsigned char code PY_mb_hong []={"轰哄烘弘红宏洪虹鸿"};
unsigned char code PY_mb_hou []={"侯喉猴吼后厚候"};
unsigned char code PY_mb_hu []={"乎呼忽弧狐胡壶湖葫瑚糊蝴虎唬互户护沪"};
unsigned char code PY_mb_hua []={"花华哗滑猾化划画话"};
unsigned char code PY_mb_huai []={"怀徊淮槐坏"};
unsigned char code PY_mb_huan []={"欢还环桓缓幻宦唤换涣患焕痪豢"};
unsigned char code PY_mb_huang []={"荒慌皇凰黄惶煌蝗磺簧恍晃谎幌"};
unsigned char code PY_mb_hui []={"灰恢挥辉徽回蛔悔卉汇会讳绘诲烩贿晦秽惠毁慧"};
unsigned char code PY_mb_hun []={"昏荤婚浑魂混"};
unsigned char code PY_mb_huo []={"豁活火伙或货获祸惑霍"};
unsigned char code PY_mb_ji []={"讥击饥圾机肌鸡迹姬积基绩缉畸箕稽激及吉汲级即极急疾棘集嫉辑籍几己挤脊计记伎纪妓忌技际剂季既济继寂寄悸祭蓟冀藉"};
unsigned char code PY_mb_jia []={"加夹佳枷家嘉荚颊甲贾钾价驾架假嫁稼挟"};
unsigned char code PY_mb_jian []={"奸尖坚歼间肩艰兼监笺缄煎拣俭柬茧捡减剪检硷简碱见件建饯剑荐贱健涧舰渐溅践鉴键箭"};
unsigned char code PY_mb_jiang []={"江姜将浆僵疆讲奖桨蒋匠降酱"};
unsigned char code PY_mb_jiao []={"交郊娇浇骄胶椒焦蕉礁角狡绞饺矫脚铰搅剿缴叫轿较教窖酵觉嚼"};
unsigned char code PY_mb_jie []={"阶皆接秸揭街节劫杰洁结捷睫截竭姐解介戒芥届界疥诫借"};
unsigned char code PY_mb_jin []={"巾今斤金津筋襟仅紧谨锦尽劲近进晋浸烬禁靳"};
unsigned char code PY_mb_jing []={"京经茎荆惊晶睛粳兢精鲸井颈景警净径痉竞竟敬靖境静镜"};
unsigned char code PY_mb_jiong []={"炯窘"};
unsigned char code PY_mb_jiu []={"纠究揪九久灸玖韭酒旧臼咎疚厩救就舅"};
unsigned char code PY_mb_ju []={"居拘狙驹疽鞠局桔菊咀沮举矩句巨拒具炬俱剧惧据距锯聚踞"};
unsigned char code PY_mb_juan []={"娟捐鹃卷倦绢眷"};
unsigned char code PY_mb_jue []={"撅决诀抉绝倔掘爵攫"};
unsigned char code PY_mb_jun []={"军君均钧菌俊郡峻浚骏竣"};
unsigned char code PY_mb_ka []={"咖喀卡"};
unsigned char code PY_mb_kai []={"开揩凯慨楷"};
unsigned char code PY_mb_kan []={"槛刊勘堪坎砍看"};
unsigned char code PY_mb_kang []={"康慷糠扛亢抗炕"};
unsigned char code PY_mb_kao []={"考拷烤靠"};
unsigned char code PY_mb_ke []={"坷苛柯科棵颗磕壳咳可渴克刻客课"};
unsigned char code PY_mb_ken []={"肯垦恳啃"};
unsigned char code PY_mb_keng []={"吭坑"};
unsigned char code PY_mb_kong []={"空孔恐控"};
unsigned char code PY_mb_kou []={"抠口扣寇"};
unsigned char code PY_mb_ku []={"枯哭窟苦库裤酷"};
unsigned char code PY_mb_kua []={"夸垮挎胯跨"};
unsigned char code PY_mb_kuai []={"块快侩筷"};
unsigned char code PY_mb_kuan []={"宽款"};
unsigned char code PY_mb_kuang []={"匡筐狂况旷矿框眶"};
unsigned char code PY_mb_kui []={"亏岿盔窥奎葵魁傀愧溃馈"};
unsigned char code PY_mb_kun []={"坤昆捆困"};
unsigned char code PY_mb_kuo []={"扩括阔廓"};
unsigned char code PY_mb_la []={"垃拉啦喇腊蜡辣"};
unsigned char code PY_mb_lai []={"来莱赖"};
unsigned char code PY_mb_lan []={"兰拦栏婪阑蓝谰澜篮览揽缆懒烂滥"};
unsigned char code PY_mb_lang []={"郎狼廊琅榔朗浪"};
unsigned char code PY_mb_lao []={"捞劳牢老佬姥涝烙酪"};
unsigned char code PY_mb_le []={"乐勒了"};
unsigned char code PY_mb_lei []={"雷镭垒磊蕾儡肋泪类累擂"};
unsigned char code PY_mb_leng []={"棱楞冷"};
unsigned char code PY_mb_li []={"厘梨狸离莉犁漓璃黎篱礼李里哩理鲤力历厉立吏丽利励沥例隶俐荔栗砾粒傈痢"};
unsigned char code PY_mb_lian []={"连帘怜涟莲联廉镰敛脸练炼恋链"};

- 作者: lizhiyuan 2007年07月13日, 星期五 12:47  回复(0) |  引用(0) 加入博采

用C51实现单片机的中文输法  (作者置顶)

用C51实现单片机的中文输法

说明:
拼音输入法杳询函数: unsigned char code * py_ime(unsigned char input_py_val[]);
input_py_val为已输入的拼音码字符串头指针,反回值为中文的起始地址,当为0时,杳询失败
应用举例:
{
unsigned char input_string[]={"bang"};
unsigned char chines_string[100];
sprintf(chines_string,"%s",py_ime(input_string));

 

C51程序:

//"********************CCDC01采集器测试仪软件:拼音输入法模块******************"
//"* 软件设计:张 凯 *"
//"* 日期: 2001/3 *"
//"* 编译环境:Franklin 3.3.4 *"
//"**************************************************************************"

#i nclude <string.h>
#i nclude <reg51.h>

//"********************CCDC01采集器测试仪软件:拼音输入法码表*****************"
//"* 软件设计:张 凯 *"
//"* 日期: 2001/3 *"
//"* 编译环境:Franklin 3.3.4 *"
//"*************************************************************************"

//"拼音输入法汉字排列表"
unsigned char code PY_mb_a []={"阿啊"};
unsigned char code PY_mb_ai []={"哎哀唉埃挨皑癌矮蔼艾爱隘碍"};
unsigned char code PY_mb_an []={"安氨鞍俺岸按案胺暗"};
unsigned char code PY_mb_ang []={"肮昂盎"};
unsigned char code PY_mb_ao []={"凹敖熬翱袄傲奥澳懊"};
unsigned char code PY_mb_ba []={"八巴叭扒吧芭疤捌笆拔跋把靶坝爸罢霸"};
unsigned char code PY_mb_bai []={"白百佰柏摆败拜稗"};
unsigned char code PY_mb_ban []={"扳班般颁斑搬板版办半伴扮拌绊瓣"};
unsigned char code PY_mb_bang []={"邦帮梆绑榜膀蚌傍棒谤磅镑"};
unsigned char code PY_mb_bao []={"包苞胞褒雹宝饱保堡报抱豹鲍暴爆剥薄瀑"};
unsigned char code PY_mb_bei []={"卑杯悲碑北贝狈备背钡倍被惫焙辈"};
unsigned char code PY_mb_ben []={"奔本苯笨夯"};
unsigned char code PY_mb_beng []={"崩绷甭泵迸蹦"};
unsigned char code PY_mb_bi []={"逼鼻比彼笔鄙币必毕闭庇毖陛毙敝痹蓖弊碧蔽壁避臂"};
unsigned char code PY_mb_bian []={"边编鞭贬扁卞便变遍辨辩辫"};
unsigned char code PY_mb_biao []={"彪标膘表"};
unsigned char code PY_mb_bie []={"憋鳖别瘪"};
unsigned char code PY_mb_bin []={"宾彬斌滨濒摈"};
unsigned char code PY_mb_bing []={"冰兵丙秉柄炳饼并病"};
unsigned char code PY_mb_bo []={"拨波玻钵脖菠播伯驳帛泊勃铂舶博渤搏箔膊卜"};
unsigned char code PY_mb_bu []={"补哺捕不布步怖部埠簿"};
unsigned char code PY_mb_ca []={"擦"};
unsigned char code PY_mb_cai []={"猜才材财裁采彩睬踩菜蔡"};
unsigned char code PY_mb_can []={"参餐残蚕惭惨灿"};
unsigned char code PY_mb_cang []={"仓沧苍舱藏"};
unsigned char code PY_mb_cao []={"操糙曹槽草"};
unsigned char code PY_mb_ce []={"册侧厕测策"};
unsigned char code PY_mb_ceng []={"层蹭曾"};
unsigned char code PY_mb_cha []={"叉插查茬茶搽察碴岔诧差刹"};
unsigned char code PY_mb_chai []={"拆柴豺"};
unsigned char code PY_mb_chan []={"掺搀谗馋缠蝉产铲阐颤"};
unsigned char code PY_mb_chang []={"昌猖肠尝偿常厂场敞畅倡唱"};
unsigned char code PY_mb_chao []={"抄钞超巢朝嘲潮吵炒绰"};
unsigned char code PY_mb_che []={"车扯彻掣撤澈"};
unsigned char code PY_mb_chen []={"郴尘臣忱沉辰陈晨衬趁"};
unsigned char code PY_mb_cheng []={"称撑成呈承诚城乘惩程澄橙逞骋秤"};
unsigned char code PY_mb_chi []={"吃痴弛池驰迟持尺侈齿耻斥赤炽翅"};
unsigned char code PY_mb_chong []={"充冲虫崇宠"};
unsigned char code PY_mb_chou []={"抽仇绸畴愁稠筹酬踌丑瞅臭"};
unsigned char code PY_mb_chu []={"出初除厨滁锄雏橱躇础储楚处搐触矗畜"};
unsigned char code PY_mb_chuai []={"揣"};
unsigned char code PY_mb_chuan []={"川穿传船椽喘串"};
unsigned char code PY_mb_chuang[]={"闯疮窗床创"};
unsigned char code PY_mb_chui []={"吹炊垂捶锤"};
unsigned char code PY_mb_chun []={"春椿纯唇淳醇蠢"};
unsigned char code PY_mb_chuo []={"戳"};
unsigned char code PY_mb_ci []={"疵词茨瓷慈辞磁雌此次刺赐"};
unsigned char code PY_mb_cong []={"囱从匆葱聪丛"};
unsigned char code PY_mb_cou []={"凑"};
unsigned char code PY_mb_cu []={"粗促醋簇"};
unsigned char code PY_mb_cuan []={"蹿窜篡"};
unsigned char code PY_mb_cui []={"崔催摧脆淬瘁粹翠"};
unsigned char code PY_mb_cun []={"村存寸"};
unsigned char code PY_mb_cuo []={"搓磋撮挫措错"};
unsigned char code PY_mb_da []={"搭达答瘩打大"};
unsigned char code PY_mb_dai []={"呆歹傣代带待怠殆贷袋逮戴"};
unsigned char code PY_mb_dan []={"丹单担耽郸胆掸旦但诞弹惮淡蛋氮"};
unsigned char code PY_mb_dang []={"当挡党荡档"};
unsigned char code PY_mb_dao []={"刀导岛倒捣祷蹈到悼盗道稻"};
unsigned char code PY_mb_de []={"得德的"};
unsigned char code PY_mb_deng []={"灯登蹬等邓凳瞪"};
unsigned char code PY_mb_di []={"低堤滴狄迪敌涤笛嫡底抵地弟帝递第缔蒂"};
unsigned char code PY_mb_dian []={"掂滇颠典点碘电佃甸店垫惦淀奠殿靛"};
unsigned char code PY_mb_diao []={"刁叼凋碉雕吊钓掉"};
unsigned char code PY_mb_die []={"爹跌迭谍叠碟蝶"};
unsigned char code PY_mb_ding []={"丁叮盯钉顶鼎订定锭"};
unsigned char code PY_mb_diu []={"丢"};
unsigned char code PY_mb_dong []={"东冬董懂动冻侗恫栋洞"};
unsigned char code PY_mb_dou []={"都兜斗抖陡豆逗痘"};
unsigned char code PY_mb_du []={"督毒读犊独堵赌睹妒杜肚度渡镀"};
unsigned char code PY_mb_duan []={"端短段断缎锻"};
unsigned char code PY_mb_dui []={"堆队对兑"};
unsigned char code PY_mb_dun []={"吨敦墩蹲盾钝顿遁"};
unsigned char code PY_mb_duo []={"多哆夺掇朵垛躲剁堕舵惰跺"};
unsigned char code PY_mb_e []={"讹俄娥峨鹅蛾额厄扼恶饿鄂遏"};
unsigned char code PY_mb_en []={"恩"};
unsigned char code PY_mb_er []={"儿而尔耳洱饵二贰"};
unsigned char code PY_mb_fa []={"发乏伐罚阀筏法珐"};
unsigned char code PY_mb_fan []={"帆番翻藩凡矾钒烦樊繁反返犯泛饭范贩"};
unsigned char code PY_mb_fang []={"方坊芳防妨房肪仿访纺放"};
unsigned char code PY_mb_fei []={"飞非啡菲肥匪诽吠废沸肺费"};
unsigned char code PY_mb_fen []={"分吩纷芬氛酚坟汾焚粉份奋忿愤粪"};
unsigned char code PY_mb_feng []={"丰风枫封疯峰烽锋蜂冯逢缝讽凤奉"};
unsigned char code PY_mb_fo []={"佛"};
unsigned char code PY_mb_fou []={"否"};
unsigned char code PY_mb_fu []={"夫肤孵敷弗伏扶拂服俘氟浮涪符袱幅福辐抚甫府斧俯釜辅腑腐父讣付妇负附咐阜复赴副傅富赋缚腹覆"};
unsigned char code PY_mb_ga []={"嘎噶"};
unsigned char code PY_mb_gai []={"该改钙盖溉概"};
unsigned char code PY_mb_gan []={"干甘杆肝柑竿秆赶敢感赣"};
unsigned char code PY_mb_gang []={"冈刚岗纲肛缸钢港杠"};
unsigned char code PY_mb_gao []={"皋羔高膏篙糕搞稿镐告"};
unsigned char code PY_mb_ge []={"戈疙哥胳鸽割搁歌阁革格葛隔个各铬咯"};
unsigned char code PY_mb_gei []={"给"};
unsigned char code PY_mb_gen []={"根跟"};
unsigned char code PY_mb_geng []={"更庚耕羹埂耿梗"};
unsigned char code PY_mb_gong []={"工弓公功攻供宫恭躬龚巩汞拱共贡"};
unsigned char code PY_mb_gou []={"勾沟钩狗苟构购垢够"};
unsigned char code PY_mb_gu []={"估咕姑孤沽菇辜箍古谷股骨蛊鼓固故顾雇"};
unsigned char code PY_mb_gua []={"瓜刮剐寡挂褂"};
unsigned char code PY_mb_guai []={"乖拐怪"};
unsigned char code PY_mb_guan []={"关观官冠棺馆管贯惯灌罐"};
unsigned char code PY_mb_guang []={"光广逛"};
unsigned char code PY_mb_gui []={"归圭龟规闺硅瑰轨诡癸鬼刽柜贵桂跪"};
unsigned char code PY_mb_gun []={"辊滚棍"};
unsigned char code PY_mb_guo []={"郭锅国果裹过"};
unsigned char code PY_mb_ha []={"蛤哈"};
unsigned char code PY_mb_hai []={"孩骸海亥骇害氦"};
unsigned char code PY_mb_han []={"酣憨含邯函涵寒韩罕喊汉汗旱悍捍焊憾撼翰"};
unsigned char code PY_mb_hang []={"杭航行"};
unsigned char code PY_mb_hao []={"毫豪嚎壕好郝号浩耗"};
unsigned char code PY_mb_he []={"呵喝禾合何和河阂核荷涸盒菏贺褐赫鹤"};
unsigned char code PY_mb_hei []={"黑嘿"};
unsigned char code PY_mb_hen []={"痕很狠恨"};
unsigned char code PY_mb_heng []={"亨哼恒横衡"};
unsigned char code PY_mb_hong []={"轰哄烘弘红宏洪虹鸿"};
unsigned char code PY_mb_hou []={"侯喉猴吼后厚候"};
unsigned char code PY_mb_hu []={"乎呼忽弧狐胡壶湖葫瑚糊蝴虎唬互户护沪"};
unsigned char code PY_mb_hua []={"花华哗滑猾化划画话"};
unsigned char code PY_mb_huai []={"怀徊淮槐坏"};
unsigned char code PY_mb_huan []={"欢还环桓缓幻宦唤换涣患焕痪豢"};
unsigned char code PY_mb_huang []={"荒慌皇凰黄惶煌蝗磺簧恍晃谎幌"};
unsigned char code PY_mb_hui []={"灰恢挥辉徽回蛔悔卉汇会讳绘诲烩贿晦秽惠毁慧"};
unsigned char code PY_mb_hun []={"昏荤婚浑魂混"};
unsigned char code PY_mb_huo []={"豁活火伙或货获祸惑霍"};
unsigned char code PY_mb_ji []={"讥击饥圾机肌鸡迹姬积基绩缉畸箕稽激及吉汲级即极急疾棘集嫉辑籍几己挤脊计记伎纪妓忌技际剂季既济继寂寄悸祭蓟冀藉"};
unsigned char code PY_mb_jia []={"加夹佳枷家嘉荚颊甲贾钾价驾架假嫁稼挟"};
unsigned char code PY_mb_jian []={"奸尖坚歼间肩艰兼监笺缄煎拣俭柬茧捡减剪检硷简碱见件建饯剑荐贱健涧舰渐溅践鉴键箭"};
unsigned char code PY_mb_jiang []={"江姜将浆僵疆讲奖桨蒋匠降酱"};
unsigned char code PY_mb_jiao []={"交郊娇浇骄胶椒焦蕉礁角狡绞饺矫脚铰搅剿缴叫轿较教窖酵觉嚼"};
unsigned char code PY_mb_jie []={"阶皆接秸揭街节劫杰洁结捷睫截竭姐解介戒芥届界疥诫借"};
unsigned char code PY_mb_jin []={"巾今斤金津筋襟仅紧谨锦尽劲近进晋浸烬禁靳"};
unsigned char code PY_mb_jing []={"京经茎荆惊晶睛粳兢精鲸井颈景警净径痉竞竟敬靖境静镜"};
unsigned char code PY_mb_jiong []={"炯窘"};
unsigned char code PY_mb_jiu []={"纠究揪九久灸玖韭酒旧臼咎疚厩救就舅"};
unsigned char code PY_mb_ju []={"居拘狙驹疽鞠局桔菊咀沮举矩句巨拒具炬俱剧惧据距锯聚踞"};
unsigned char code PY_mb_juan []={"娟捐鹃卷倦绢眷"};
unsigned char code PY_mb_jue []={"撅决诀抉绝倔掘爵攫"};
unsigned char code PY_mb_jun []={"军君均钧菌俊郡峻浚骏竣"};
unsigned char code PY_mb_ka []={"咖喀卡"};
unsigned char code PY_mb_kai []={"开揩凯慨楷"};
unsigned char code PY_mb_kan []={"槛刊勘堪坎砍看"};
unsigned char code PY_mb_kang []={"康慷糠扛亢抗炕"};
unsigned char code PY_mb_kao []={"考拷烤靠"};
unsigned char code PY_mb_ke []={"坷苛柯科棵颗磕壳咳可渴克刻客课"};
unsigned char code PY_mb_ken []={"肯垦恳啃"};
unsigned char code PY_mb_keng []={"吭坑"};
unsigned char code PY_mb_kong []={"空孔恐控"};
unsigned char code PY_mb_kou []={"抠口扣寇"};
unsigned char code PY_mb_ku []={"枯哭窟苦库裤酷"};
unsigned char code PY_mb_kua []={"夸垮挎胯跨"};
unsigned char code PY_mb_kuai []={"块快侩筷"};
unsigned char code PY_mb_kuan []={"宽款"};
unsigned char code PY_mb_kuang []={"匡筐狂况旷矿框眶"};
unsigned char code PY_mb_kui []={"亏岿盔窥奎葵魁傀愧溃馈"};
unsigned char code PY_mb_kun []={"坤昆捆困"};
unsigned char code PY_mb_kuo []={"扩括阔廓"};
unsigned char code PY_mb_la []={"垃拉啦喇腊蜡辣"};
unsigned char code PY_mb_lai []={"来莱赖"};
unsigned char code PY_mb_lan []={"兰拦栏婪阑蓝谰澜篮览揽缆懒烂滥"};
unsigned char code PY_mb_lang []={"郎狼廊琅榔朗浪"};
unsigned char code PY_mb_lao []={"捞劳牢老佬姥涝烙酪"};
unsigned char code PY_mb_le []={"乐勒了"};
unsigned char code PY_mb_lei []={"雷镭垒磊蕾儡肋泪类累擂"};
unsigned char code PY_mb_leng []={"棱楞冷"};
unsigned char code PY_mb_li []={"厘梨狸离莉犁漓璃黎篱礼李里哩理鲤力历厉立吏丽利励沥例隶俐荔栗砾粒傈痢"};
unsigned char code PY_mb_lian []={"连帘怜涟莲联廉镰敛脸练炼恋链"};

- 作者: lizhiyuan 2007年07月13日, 星期五 12:46  回复(0) |  引用(0) 加入博采

自制EA51编程器  (作者置顶)
自制EA51编程器 EA51编程器来源于网上广泛流传的Easy_ 51pro2.0宇宙版的资料,经过本站整理改进后的版本,烧写速度快,写一片AT89C51只需不到5秒的时间,且具有制作容易,无需调试等优点,按板上元器件对应焊接好就可以使用,100%的成功率是每个DIY爱好者所期待的。


支持的芯片:AT89C51;AT89C52;AT89C55;AT89S51;AT89S52;AT89C1051;AT89C2051;AT89C4051

  
EA51编程器具有编程(自动)、读取、校验(自动)、空检查、擦除、加密等功能;对于20脚的AT89C2051等芯片无需另加20PIN烧写座,直接在40脚的锁紧座上烧写,所以EA编程器看起来非常的小巧,便于随身携带,详细参照下面介绍

 

EA51编程器的原理图如下图:

图片点击可在新窗口打开查看


EA51编程器元器件表

元件名称

器件数

附注

电阻(碳膜或金属膜)10K

4

1/16W

电阻(碳膜或金属膜)3K

4

1/16W

电阻(碳膜或金属膜)220

2

1/16W

电阻(碳膜或金属膜)0.5

1

1/4W

电阻(碳膜或金属膜)1K

4

1/16W

电阻(碳膜或金属膜)2.2K

1

1/16W

电阻(碳膜或金属膜)20K

1

1/16W

色码电感,120uH

1

1/2W

220P电容

1

(瓷片或独石)

104电容

1

(瓷片或独石)

30P电容

2

(瓷片或独石)

100uF/16V电解电容

1

   

100uF/25V电解

1

  

发光二极管红色和绿色

2

直径3MM

晶振11.0592

1

   

三极管9014

4

可用8050或BC547代替

三极管9015

1

可用8550或BC327等代替

双刀双掷按键

1

自锁式按键

103排阻,10KX9脚

1

 

二极管1N4148

1

 

40脚IC座

1

插放监控芯片AT89C51

40脚万能锁紧座

1

编程器烧写芯片座

MC34063

1

升压集成电路

AT89C51

1

监控芯片

DR9

1

串口通信座

USB座

1

为编程器提供电源

EA51PCB线路板

1

 

USB线

1

供电

标准串口线

1

主机和电脑通信


EA51编程器的芯片识别功能如下图

图片点击可在新窗口打开查看


正在编程写AT89S52芯片过程的图片

图片点击可在新窗口打开查看



EA51编程器的正面PCB线路板如下图

图片点击可在新窗口打开查看

EA51编程器的反面PCB线路板如下图

图片点击可在新窗口打开查看

图片点击可在新窗口打开查看



烧写AT89C51时,AT89C51的位置如下图

图片点击可在新窗口打开查看

烧写AT89C2051时按下右图中的按键开关,放置AT89C2051的位置如下图

图片点击可在新窗口打开查看

图片点击可在新窗口打开查看

焊接好的EA51编程器如下图,怎么样很精致漂亮吧,只要你焊接无误,就可以用它来写芯片了

图片点击可在新窗口打开查看

图片点击可在新窗口打开查看

 下载信息
图片点击可在新窗口打开查看点击浏览该文件:

- 作者: lizhiyuan 2007年07月13日, 星期五 12:41  回复(0) |  引用(0) 加入博采

实用电子制作需要那些元件  (作者置顶)
    无论是电子爱好者还是新产品开发者在制作电路或者研制样机时都离不开电子实验,这里简单介绍一下站长在电子制作方面的一些小经验,希望能对入门者有所帮助,如果你不再是入门者请跳过本节,以免浪费你宝贵的时间。

    说起电子制作当然离不开品种繁多的电子元件,站长在上中学期间就开始搞单管收音机 ,,那时可以说要啥没啥,三极管是在街上修收音机滩头上花大价钱买的,线路板是用装修用的“三层板”然后在上面用几个老式的图钉按在上面,做焊点连接线路 的,不象现在电子制作是很方便的事;所以站长身知要自己搞点小东东不容易啊!!!所以站长开通元件邮购业务,为一些不便取得电子制作原材料的电子爱好者提 供帮助;
   本站长现在搞一些研究,也还是要对一些部分电路进行实验,本站长在搞小东东时,一般是先画电路图,然后在自己的万能实验上搭线实验,不象别的朋友直接在多孔实验板上焊接实验,这样即浪费又麻烦,因为多孔板只能焊接一到二次就报废了;所以我是先 在万能面包板上实验,通过了,如只有几个产品,就在多孔板上焊接,批量多的话在开板制线路板,推荐广大电 子爱好者使用万能面包实验板,质量保证,单片机开发也可在上面,真是不能缺少的实验板
    如下图:
每块45元(量大批发价本站提供的是好质量的铜芯的板)


  下面是本站提供一些常用元器件,基本都配了,一般的电子制作都能满足;
    电解电容在电路中的功能一般是:滤波、耦合、定时,大部分情况下对容量的要求不是非常精确,如功率放大电路中用0.47uf时直接用1UF也可 以,所以选择一些常用的规格每种买上20个一般足已。大部分电子制作可以用1/8W电阻,所以挑选常用的阻值,每种买上50个可以一劳永逸。再把阻值写在 编带上找起来就更容易了。

   单片机与电子制作网站为了方便网友电子制作,精心组织了多款电子元件包供网友邮购!

1。常用电容元件包:(每包16元)

1UF/50V、4.7UF/16V、10UF/16V、47UF/25V、 100UF/25V、220UF/25V、220UF/50V、1000UF/25V(每样10个)注:电压滤波时如:电压较高大于25V时可用 220UF/50V;稳压后如12V时,在用1000UF/25V提高滤波性能。(耐压高价也高)(增加瓷片电容为:101P,102P,103P, 104P,33P,6.8P等各10片)

2。常用1/4瓦电阻元件包:(每包12元)

    其实对于一个电子制作爱好者而言,制作用的电阻最难购买,大部分家电维修配件商店都没有电阻供应,即使有也只有品种很少的大功率易损电阻供应,在电子元件配套专业市场上,虽然电阻的型号种类很全,但是如果你要购买少量电阻还是买不到或着价格较贵,因为电阻的一个品种单位为1000个,商家一般不愿意拆开,站长是深有体会的。

   其中包括常用的1/4瓦五环金属膜电阻20个品种左右,每种25个,(也可以提供1/8W碳膜的小型的购买是定单注明)编带包装且已注明阻值便于初学者识别、查找,基本阻值规格如下:

3、10、24、51、100、220、470、1K、2.7K、5.1K、10K、15K、20K、39K、47K、56K、100K、200K、470K、560K、1M、2M等(每样25个)

3。常用二极管元件包:(每包8元)

1。IN4007最常用的整流二极管 10个
2。IN4148最常用的开关二极管 20个
3。红色/绿色发光二极管 各5个
4。12V/5.6V各5个

4。常用三极管包:(每包15元)

型号
极性
PCM(W)
ICM(mA)
BU(CEO)V
fT(MHZ)
hFE
主要用途
9011
NPN
0.4
30
50
370
28~198
通用功率放大
9012
PNP
0.625
500
40

64~202

9013
NPN
0.625
500
40

64~202

9014
NPN
0.625
100
50
270
60~1000

9015
PNP
0.45
100
50
190
60~600

9016
NPN
0.4
25
30
620
28~198
低噪声放大管
9018
NPN
0.4
50
30
1100
28~198
低噪声高频放大管
8050
NPN
1
1.5A
25
190
85~300
通用功率放大管
8550
PNP
1
1.5A
25
200
60~300
通用功率放大管

9013三极管10个
9012三极管10个
9018三极管10个
8050三极管10个
8550三极管10个

以上是5种常用的三极管,每种10个

5。电子制作元件大包:优惠价:45元每包!(赠送瓷片包);

AT89s51  8元/片;89S52 9元/片;0.5寸共阳LED数码管2元个;LM7805/7812/7824三端稳压2元/块;12MHZ/11。059MHZ晶振2元/个78L05(似8050)1元/只;40脚、20脚、14脚、18脚、16脚普通IC插座1元一个;小 的按钮0.5元一个(就是单片机实验板上的)如下图
   自己制作单片机实验板的朋友可以注明这样本站可以50元配好包括上图内的元件和多孔板及一些常用元件给您,这样配并口编程器就可以学单片机拉,当然要配一片89S51给您的了

    元件大包是为了方便初学者电子制作而准备的常用元件套装,它包含了常用的电阻、电容、二极管、三极管等,详细的元件清单如下:

1。电阻   

    其中包括常用的1/4瓦五环金属膜电阻20个品种,每种25个,编带包装,便于保存查找,基本阻值规格如下:

3、10、24、51、100、220、470、1K、2.7K、5.1K、10K、15K、20K、39K、47K、56K、100K、200K、470K、560K、1M、2M,4.7M等(每样25个))

2。电容

1UF/50V、4.7UF/16V、10UF/16V、47UF/25V、 100UF/25V、220UF/25V、220UF/50V、1000UF/25V(每样10个)(增加瓷片101,102,103,104P,即 100PF、1000PF、0.01UF、0.1UF另送10片33PF的震荡电容)

3。二极管

IN4007最常用的整流二极管 10个
IN4148最常用的开关二极管 20个
红色/绿色发光二极管 10个
12V/0。5W稳压管10个(或5.1V和12V各5个)

4。三极管

9013三极管10个
9012三极管10个
9018三极管10个
8050三极管10个
8550三极管10个

6。常用集成电路元件包:(每包18元)

 

LM7805(常用三端稳压集成电路1个)
LM386(常用小功率单声道音频功率放大集成电路1片)
555、CD4069、CD4017、CD4013(常用数字电路每样2片)
PT521-1(常用光电耦合器2个)

7。点阵式万能实验大板/光板尺寸和点阵的一样大:(4元一片)

   


     这是一种使用很方便的焊接试验板,大小为150X95毫米,(要求再大的可以提供订购如200*170毫米12元/块)这种板的孔距都是标准的100mil(0.24毫米)距离,可以方便地插入集成电路芯片或者其它元件,电路连线可以直接借用元件的引脚或者用单股硬导线连接,这种板剪裁还特别方便,用美工刀划一下,然后放在桌子边缘一折就OK了!这种实验板的焊盘焊接时要快,防止过热脱落,进行电子实验时,应先在上面提供的万能面包实验板上实验通过后在焊接或直接出板。

    
8.断续声/音乐(有至爱丽斯/伦巴哒/泰坦尼克号主题曲)声蜂鸣器

    市场上一般只有连续声蜂鸣器本站特提供以上音乐蜂鸣器3元/只,断续声2.5元

9、常用热缩管1-5MM直径7元/包
 热缩管在电子制作中用处很大,用烙铁头烫或用火机烤一下就缩紧您的接线头拉来封闭包裹导线既漂亮又牢固,使用时先剪好1-2CM长套在导线上后在接,我们挑选了直径1毫米、2毫米、3毫米、5毫米4种常用热缩管每个品种1.5米长提供给网友。
10、常用音响功放用电位器和配套的调节旋钮如图:
   
旋钮的尺寸有直径:17MM的2元/个;21MM的3元/个;30MM的4/元个;黑色5MM的5元/个;电位器:100K,200K,300K,1M的单联的3元/个,双联的6元/个;质量好是制作功放的很好的DIY首选
11、优质麦克风的插座6元/个如图:
12、LED点阵显示屏8*8(64个φ5的红色发光管)外形尺寸:6*6CM如下图:价格11元/片
 

制作工具类产品1:优质斜口钳(15元一把)

   中日合资的优质斜口钳。特点:钳口小,可以伸入设备缝隙中作业,钳口的底部是平的,可以齐根剪断元件引脚,重量轻、操作省力,钳口硬,久用不钝、寿命长。

制作工具类产品2:30W电烙铁(25元一把)

如需要焊锡丝可以邮购的,因为有些偏僻地方的朋友不好买的1.0直径的优质3米/10元。

    广州的名牌产品,长时间工作,烙铁头也不容易烧死,产品质量好,使用寿命长(一般的学生实验烙铁8元也有但几次就不能用了,烙铁头都化了)。

   精 心制作的小产品如果没有合适的外壳一定很扫兴,通常电子爱好者喜欢采用塑料小外壳,这是因为塑料外壳轻巧美观,并且价格便宜,在塑料外壳开孔挖槽也比较方 便。如果去专门定做开模注塑塑料外壳光模具费用至少几千元,所以在小批量生产时一般选用通用的小外壳,这里可以提供几种塑料外壳供网友选择参考。



 
万用表DT-830B型经济型适合常用的电子制作使用价格28块/只
 
DT-830B三位半全数字万用表,具有功能全、精度高、读数清晰准确、使用简单、小巧轻便等特点,可测直流电压DCV、直流电流DCA、交流电压ACV、电阻Ω、二极管、三极管hFE,是电脑爱好者,无线电爱好者、专业维修人员及家庭等必备的常用工具。
  
 
万用表A830L型实用型有抗干扰功能价格60块/只
 
全保护功能,防高压打火电路设计(防浪涌管1300V)。
具有上830B的全部功能电流可以测到10A功能更全使用更安全
 

塑料外壳产品A 2元一个

 

    外壳尺寸15x45x35mm,长方体的无螺丝固定的直接镶嵌的.可以做模块用

塑料外壳产品B 4元一个

    外壳尺寸55x25x75mm,内部壳体的四个角上有便于自攻螺丝固定的塑料柱,上下盒盖采用4个塑料卡口连接,底面有可以挂在墙上的开口,这样既很紧密同时内部空间利用率又高。盒子两侧有散热窗,造型比较美观。
塑料外壳产品C 6元/套
   
标准86型遥控开关/触摸开关外壳,有两位和一位的,带后固定的罩子如图是电子爱好者制作各种开关的理想外壳

塑料外壳产品F 10元一个

    外壳尺寸142x88x30mm,内部壳体的四个角上有便于自攻螺丝固定线路板的塑料柱,上下盒盖采用4自攻螺丝连接,这样既很紧密同时内部空间利用率又高,非常坚固耐压。侧面预留电源插座和LED位置,以及安装输出接线端子。

塑料外壳产品G 12元一个

  

    外壳尺寸170x110x30mm,内部壳体的四个角上有螺丝固定的塑料柱,非常牢固可靠,有和壳体公用的PCB固定的自攻螺丝塑料柱,正面带有八个指示灯开口,背面带有安装挂孔两个.可以用作通信/报警器外壳.

入门开发板淘宝店
本站特价商城
QQ交流群: 24423246

- 作者: lizhiyuan 2007年07月12日, 星期四 17:22  回复(2) |  引用(0) 加入博采

单片机如何入门?谈谈我的建议  (作者置顶)

单片机如何入门?谈谈我的建议

学习单片机要简单很多,可以先从它学起。可以说51单片机应用广泛,上手也比较容易,现成的电路和设计比较多,便于开发应用。
首先找一个入门教程+一本51单片机原理的书籍,先整个看一遍,对51有个整体的大概的认识。
第 二步,找块实验板,51的话只要200元左右就可以买到比较合适的了,太贵的入门有点浪费,太便宜的就不好评价了:)。你要看上面的资源是否丰富,比如: 有多少按键,多少LED,有没有温度传感器,红外等,一定要找有比较完善的说明书的板子。找来开发板先把说明书好好看一遍,不要着急作实验;看完后就可以 开始了。首先按照说明书一步一步来,把每个实验好好做一遍,不要认为简单就不做。程序肯定开发板自带,不过你可以自己敲一遍,一方面加深记忆,另外可以自 己作些小小的改动,似乎是你自己写的,心里会有点成就感:) 做实验的过程要理论联系实际,结合第一步的书籍把51的本质和原理吃透,便于以后更好的开发。
第三步,按部就班的把所有的实验作完,就可以按照自己的想法在现有程序基础慢慢的作些修改,来达到自己想要达到的效果,关键是掌握硬件原理,程序语言的应用。
第四步,去电子市场或网上,买来面包板或者万能板以及连接线还有常用电子元器件,电烙铁,小工具......自己根据网上的一些小的电子电路进行电路搭建和程序编写,可以先用面包板搭,如果达到想要的效果就可以用万能板给焊接起来,收藏!那是你自己的作品了,恭喜!!!

先写这么点吧,希望能有所帮助。



入门开发板淘宝店shop33621906.taobao.com

http://www.99daili.com
本站特价商城
QQ交流群: 24423246

- 作者: lizhiyuan 2007年07月4日, 星期三 09:21  回复(2) |  引用(0) 加入博采

毕业设计 下载列表  (作者置顶)

[毕业设计]恒温控制系统的设计

[毕业设计]十字路口交通信号灯控制器 

[毕业设计]采用AT89C2051制作的智能时钟 

[毕业设计]彩灯循环数字控制系统

[毕业设计]商品交易管理系统 论文+源码

[毕业设计]计算机串口通信

[毕业设计]基于神经网络的焦炉控制研究

[毕业设计]基于单片机的录放音系统设计

[毕业设计]基于Web的在线考试系统+全套

[毕业设计]基于PB的图书管理系统毕业论文+全套

[毕业设计]基于FPGA的汽车尾灯电路设计

[毕业设计]红外遥控器信号的接收和转发

[毕业设计]航空公司管理信息系统

[毕业设计]函数信号发生器的设计与制作

[毕业设计]函数信号发生器、计数器、数控电源

[毕业设计]光控计数器

[毕业设计]光电控制延时灯

[毕业设计]工资信息管理系统+源码

[毕业设计]工业废水处理系统

[毕业设计]工控信息网站的设计

[毕业设计]高稳定度LC正弦波信号震荡器

[毕业设计]多功能数字计数器设计 

请在 http://www.99daili.com 进行下载。

- 作者: lizhiyuan 2007年04月2日, 星期一 10:01  回复(0) |  引用(0) 加入博采

AT89S51单片机实验及实践教程[2007.01.17更新]  (作者置顶)
 

AT89S51单片机实验及实践教程[2007.01.17更新]

关键词AT89S51                                          

目 录


第一章 AT89S51单片机实验及实践系统板简介┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅1
第二章 Keil  C软件使用┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅14
第三章 AT89S51单片机下载器软件使用┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅25
第四章 实验及实践课题┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅28
1. 闪烁灯┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅28
2. 模拟开关灯┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅31
3. 多路开关状态指示┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅33
4. 广告灯的左移右移┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅37
5. 广告灯(利用取表方式)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅40
6. 报警产生器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅43
7. I/O并行口直接驱动LED显示┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅46
8. 按键识别方法之一┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅49
9. 一键多功能按键识别技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅53
10. 00-99计数器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅57
11. 00-59秒计时器(利用软件延时)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅60
12. 可预置可逆4位计数器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅63
13. 动态数码显示技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅67
14. 4×4矩阵式键盘识别技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅70
15. 定时计数器T0作定时应用技术(一)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅79
16. 定时计数器T0作定时应用技术(二)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅84
17. 99秒马表设计┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅89
18. “嘀、嘀、……”报警声┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅95
19. “叮咚”门铃┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅99
20. 数字钟(★)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅105
21. 拉幕式数码显示技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅114
22. 电子琴┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅121
23. 模拟计算器数字输入及显示┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅134
24. 8×8LED点阵显示技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅141
25. 点阵LED“0-9”数字显示技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅146
26. 点阵式LED简单图形显示技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅153
27. ADC0809 A/D转换器基本应用技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅157
28. 数字电压表┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅163
29. 两点间温度控制┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅167
30. 四位数数字温度计┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅172
31. 6位数显频率计数器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅177
32. 电子密码锁设计┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅180
33. 4×4键盘及8位数码管显示构成的电子密码锁┅┅┅┅┅┅┅┅┅┅┅186
34. 带有存储器功能的数字温度计-DS1624技术应用┅┅┅┅┅┅┅┅┅┅199
35. DS18B20数字温度计使用┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅211

 

下载地址:

第一章

 第二章 Keil C 软件的使用

 第四章1000-99计数器

第四章1100-59秒计时器

第四章12可预置可逆4位计数器

第四章13动态数码显示技术

第四章144×4矩阵式键盘识别技术

第四章15定时计数器T0作定时应用技术

第四章16定时计数器T0作定时应用技术

第四章1799秒马表设计

第四章18报警声

 第四章19“叮咚”门铃

第四章1闪烁灯

第四章20数字钟

第四章21拉幕式数码显示技术

第四章22电子琴

第四章23模拟计算器数字输入及显示

 第四章248X8 LED点阵显示技术

第四章25点阵式LED“0-9”数字显示技术

第四章26点阵式LED简单图形显示技术 

 第四章29两点间温度控制

 第四章30四位数数字温度计

第四章316位数显频率计数器

第四章32电子密码锁设计

第四章33×4键盘及8位数码管显示构成的电子密码锁

第四章34带有存储器功能的数字温度计

 

第四章35

- 作者: lizhiyuan 2007年01月17日, 星期三 13:20  回复(0) |  引用(0) 加入博采

MCS-51单片机存储器结构  (作者置顶)

更多资料 http://www.99daili.com 

MCS-51单片机存储器结构

MCS-51的存储器可分为四类:

     程序存储器
    一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样,都是由机器码组成的代码串。只是程序代码则存放于程序存储器中。

    MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。强制CPU从外部程序存储器读取程序。对于内部有ROM的8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。

    8051片内有4kB的程序存储单元,其地址为0000H—0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H单元开始执行程序。但在程序存储中有些特殊的单元,这在使用中应加以注意:

    其中一组特殊是0000H—0002H单元,系统复位后,PC为0000H,单片机从0000H单元开始执行程序,如果程序不是从0000H单元开始,则应在这三个单元中存放一条无条件转移指令,让CPU直接去执行用户指定的程序。

    另一组特殊单元是0003H—002AH,这40个单元各有用途,它们被均匀地分为五段,它们的定义如下:

     0003H—000AH  外部中断0中断地址区。

     000BH—0012H  定时/计数器0中断地址区。

     0013H—001AH  外部中断1中断地址区。

     001BH—0022H  定时/计数器1中断地址区。

     0023H—002AH  串行中断地址区。

    可见以上的40个单元是专门用于存放中断处理程序的地址单元,中断响应后,按中断的类型,自动转到各自的中断区去执行程序。因此以上地址单元不能用于存放程序的其他内容,只能存放中断服务程序。但是通常情况下,每段只有8个地址单元是不能存下完整的中断服务程序的,因而一般也在中断响应的地址区安放一条无条件转移指令,指向程序存储器的其它真正存放中断服务程序的空间去执行,这样中断响应后,CPU读到这条转移指令,便转向其他地方去继续执行中断服务程序。

     数据存储器
    数据存储器也称为随机存取数据存储器。MCS-51单片机的数据存储器在物理上和逻辑上都分为两个地址空间,一个是内部数据存储区和一个外部数据存储区。MCS-51内部RAM有128或256个字节的用户数据存储(不同的型号有分别),它们是用于存放执行的中间结果和过程数据的。MCS-51的数据存储器均可读写,部分单元还可以位寻址。
    8051内部RAM共有256个单元,这256个单元共分为两部分。其一是地址从00H—7FH单元(共128个字节)为用户数据RAM。从80H—FFH地址单元(也是128个字节)为特殊寄存器(SFR)单元。从图1中可清楚地看出它们的结构分布。

    在00H—1FH共32个单元中被均匀地分为四块,每块包含八个8位寄存器,均以R0—R7来命名,我们常称这些寄存器为通用寄存器。这四块中的寄存器都称为R0—R7,那么在程序中怎么区分和使用它们呢?聪明的INTEL工程师们又安排了一个寄存器——程序状态字寄存器(PSW)来管理它们,CPU只要定义这个寄存的PSW的第3和第4位(RS0和RS1),即可选中这四组通用寄存器。对应的编码关系如图2所示。

内部数据存储器的配置
内部数据存储器的配置    内部RAM的20H—2FH单元为位寻址区,既可作为一般单元用字节寻址,也可对它们的位进行寻址。位寻址区共有16个字节,128个位,位地址为00H—7FH。位地址分配如表1所示,CPU能直接寻址这些位,执行例如置“1”、清“0”、求“反”、转移,传送和逻辑等操作。我们常称MCS-51具有布尔处理功能,布尔处理的存储空间指的就是这些为寻址区。
1  RAM位寻址区地址表
单元地址MSB        位地址        LSB
2FH7FH7EH7DH7CH7BH7AH79H78H
2EH77H76H75H74H73H72H71H70H
2DH6FH6EH6DH6CH6BH6AH69H68H
2CH67H66H65H64H63H62H61H60H
2BH5FH5EH5DH5CH5BH5AH59H58H
2AH57H56H55H54H53H52H51H50H
29H4FH4EH4DH4CH4BH4AH49H48H
28H47H46H45H44H43H42H41H40H
27H3FH3EH3DH3CH3BH3AH39H38H
26H37H36H35H34H33H32H31H30H
25H2FH2EH2DH2CH2BH2AH29H28H
24H27H26H25H24H23H22H21H20H
23H1FH1EH1DH1CH1BH1AH19H18H
22H17H16H15H14H13H12H11H10H
21H0FH0EH0DH0CH0BH0AH09H08H
20H07H06H05H04H03H02H01H00H

     特殊功能寄存器
    特殊功能寄存器(SFR)也称为专用寄存器,特殊功能寄存器反映了MCS-51单片机的运行状态。很多功能也通过特殊功能寄存器来定义和控制程序的执行。

    MCS-51有21个特殊功能寄存器,它们被离散地分布在内部RAM的80H—FFH地址中,这些寄存的功能已作了专门的规定,用户不能修改其结构。表2是特殊功能寄存器分布一览表,我们对其主要的寄存器作一些简单的介绍。

    程序计数器PC(program Counter)
    程序计数器在物理上是独立的,它不属于特殊内部数据存储器块中。PC是一个16位的计数器,用于存放一条要执行的指令地址,寻址范围为64kB,PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。PC本身并没有地址,因而不可寻址,用户无法对它进行读写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序按我们的要求去执行。

    累加器ACC(Accumulator)
    累加器A是一个最常用的专用寄存器,大部分单操作指令的一个操作数取自累加器,很多双操作数指令中的一个操作数也取自累加器。加、减、乘、除法运算的指令,运算结果都存放于累加器A或AB累加器对中。大部分的数据操作都会通过累加器A进行,它形象于一个交通要道,在程序比较复杂的运算中,累加器成了制约软件效率的“瓶颈”,它的功能较多,地位也十分重要。以至于后来发展的单片机,有的集成了多累加器结构,或者使用寄存器阵列来代替累加器,即赋予更多寄存器以累加器的功能,目的是解决累加器的“交通堵塞”问题。提高单片机的软件效率。

2   特殊功能寄存器
标识符号地址寄存器名称
ACC0E0H累加器
B0F0HB寄存器
PSW0D0H程序状态字
SP81H堆栈指针
DPTR82H、83H数据指针(16位)含DPL和DPH
IE0A8H中断允许控制寄存器
IP0B8H中断优先控制寄存器
P080HI/O口0寄存器
P190HI/O口1寄存器
P20A0HI/O口2寄存器
P30B0HI/O口3寄存器
PCON87H电源控制及波特率选择寄存器
SCON98H串行口控制寄存器
SBUF99H串行数据缓冲寄存器
TCON88H定时控制寄存器
TMOD89H定时器方式选择寄存器
TL08AH定时器0低8位
TH08CH定时器0高8位
TL18BH定时器1低8位
TH18DH定时器1高8位
     寄存器B
    在乘除法指令中,乘法指令中的两个操作数分别取自累加器A和寄存器B,其结果存放于AB寄存器对中。除法指令中,被除数取自累加器A,除数取自寄存器B,结果商存放于累加器A,余数存放于寄存器B中。

     程序状态字(Program Status Word)
    程序状态字是一个8位寄存器,用于存放程序运行的状态信息,这个寄存器的一些位可由软件设置,有些位则由硬件运行时自动设置的。寄存器的各位定义如下,其中PSW.1是保留位,未使用。下表是它的功能说明,并对各个位的定义介绍如下:

3   程序状态字
位序PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0
位标志CYACF0RS1RS0OV-P

     PSW.7(CY) 进位标志位,此位有两个功能:一是存放执行某写算数运算时,存放进位标志,可被硬件或软件置位或清零。二是在位操作中作累加位使用。

     PSW.6(AC) 辅助进位标志位,当进行加、减运算时当有低4位向高4位进位或借位时,AC置位,否则被清零。AC辅助进位位也常用于十进制调整。

     PSW.5(F0) 用户标志位,供用户设置的标志位。

     PSW.4、PSW.3(RS1和 RS0) 寄存器组选择位。可参见本章的图2定义。

     PSW.2(OV) 溢出标志。带符号加减运算中,超出了累加器A所能表示的符号数有效范围(-128—+127)时,即产生溢出,OV=1。表明运算运算结果错误。如果OV=0,表明运算结果正确。
    执行加法指令ADD时,当位6向位7进位,而位7不向C进位时,OV=1。或者位6不向位7进位,而位7向C进位时,同样OV=1。
    除法指令,乘积超过255时,OV=1。表面乘积在AB寄存器对中。若OV=0,则说明乘积没有超过255,乘积只在累加器A中。
    除法指令,OV=1,表示除数为0,运算不被执行。否则OV=0。

     PSW.0(P) 奇偶校验位。声明累加器A的奇偶性,每个指令周期都由硬件来置位或清零,若值为1的位数奇数,则P置位,否则清零。

     数据指针(DPTR)
    数据指针为16位寄存器,编程时,既可以按16位寄存器来使用,也可以按两个8位寄存器来使用,即高位字节寄存器DPH和低位字节DPL。
    DPTR主要是用来保存16位地址,当对64kB外部数据存储器寻址时,可作为间址寄存器使用,此时,使用如下两条指令:

            MOVX    A, @DPTR
            MOVX    @DPTR, A

    在访问程序存储器时,DPTR可用来作基址寄存器,采用基址+变址寻址方式访问程序存储器,这条指令常用于读取程序存储器内的表格数据。

            MOVC    A, @A+@DPTR

     堆栈指针SP(Stack Pointer)
    堆栈是一种数据结构,它是一个8位寄存器,它指示堆栈顶部在内部RAM中的位置。系统复位后,SP的初始值为07H,使得堆栈实际上是从08H开始的。但我们从RAM的结构分布中可知,08H—1FH隶属1—3工作寄存器区,若编程时需要用到这些数据单元,必须对堆栈指针SP进行初始化,原则上设在任何一个区域均可,但一般设在30H—1FH之间较为适宜。
    数据的写入堆栈我们称为入栈(PUSH,有些文献也称作插入运算或压入),从堆栈中取出数据称为出栈(POP,也称为删除运算或弹出),堆栈的最主要特征是“后进先出”规则,也即最先入栈的数据放在堆栈的最底部,而最后入栈的数据放在栈的顶部,因此,最后入栈的数据出栈时则是最先的。这和我们往一个箱里存放书本一样,需将最先放入箱底部的书取出,必须先取走最上层的书籍。这个道理非常相似。

    那么堆栈有何用途呢?堆栈的设立是为了中断操作和子程序的调用而用于保存数据的,即常说的断点保护和现场保护。微处理器无论是在转入子程序和中断服务程序的执行,执行完后,还是要回到主程序中来,在转入子程序和中断服务程序前,必须先将现场的数据进行保存起来,否则返回时,CPU并不知道原来的程序执行到哪一步,原来的中间结果如何?所以在转入执行其它子程序前,先将需要保存的数据压入堆栈中保存。以备返回时,再复原当时的数据。供主程序继续执行。
堆栈结构图
    转入中断服务程序或子程序时,需要保存的数据可能有若干个,都需要一一地保留。如果微处理器进行多重子程序或中断服务程序嵌套,那么需保存的数据就更多,这要求堆栈还需要有相当的容量。否则会造成堆栈溢出,丢失应备份的数据。轻者使运算和执行结果错误,重则使整个程序紊乱。

    MCS-51的堆栈是在RAM中开辟的,即堆栈要占据一定的RAM存储单元。同时MCS-51的堆栈可以由用户设置,SP的初始值不同,堆栈的位置则不一定,不同的设计人员,使用的堆栈区则不同,不同的应用要求,堆栈要求的容量也有所不同。堆栈的操作只有两种,即进栈和出栈,但不管是向堆栈写入数据还是从堆栈中读出数据,都是对栈顶单元进行的,SP就是即时指示出栈顶的位置(即地址)。在子程序调用和中断服务程序响应的开始和结束期间,CPU都是根据SP指示的地址与相应的RAM存储单元交换数据。

    堆栈的操作有两种方法:其一是自动方式,即在中断服务程序响应或子程序调用时,返回地址自动进栈。当需要返回执行主程序时,返回的地址自动交给PC,以保证程序从断点处继续执行,这种方式是不需要编程人员干预的。第二种方式是人工指令方式,使用专有的堆栈操作指令进行进出栈操作,也只有两条指令:进栈为PUSH指令,在中断服务程序或子程序调用时作为现场保护。出栈操作POP指令,用于子程序完成时,为主程序恢复现场。

    I/O口专用寄存器(P0、P1、P2、P3)
    I/O口寄存器P0、P1、P2和P3分别是MCS-51单片机的四组I/O口锁存器。MCS-51单片机并没有专门的I/O口操作指令,而是把I/O口也当作一般的寄存器来使用,数据传送都统一使用MOV指令来进行,这样的好处在于,四组I/O口还可以当作寄存器直接寻址方式参与其他操作。

     定时/计数器(TL0、TH0、TL1和TH1)
    MCS-51单片机中有两个16位的定时/计数器T0和T1,它们由四个8位寄存器组成的,两个16位定时/计数器却是完全独立的。我们可以单独对这四个寄存器进行寻址,但不能把T0和T1当作16位寄存来使用。

    定时/计数器方式选择寄存器(TMOD)
    TMOD寄存器是一个专用寄存器,用于控制两个定时计数器的工作方式,TMOD可以用字节传送指令设置其内容,但不能位寻址,各位的定义如下,更详细的内容,我们将在《MCS-51定时器和中断系统》章节中叙述。

4   定时/计数器工作方式控制寄存器 TMOD
位序D7D6D5D4D3D2D1D0
位标志GATEM1M0GATEM1M0
 定时/计数器1定时/计数器0
   串行数据缓冲器(SBUF)
    串行数据缓冲器SBUF用来存放需发送和接收的数据,它由两个独立的寄存器组成,一个是发送缓冲器,另一个是接收缓冲器,要发送和接收的操作其实都是对串行数据缓冲器进行。

   其他控制寄存器(TMOD)
    除了以上我们简述的几个专用寄存外,还有IP、IE、TCON、SCON和PCON等几个寄存器,这几个控制寄存器主要用于中断和定时的,我们将在《MCS-51定时器和中断系统》中详细说明。

- 作者: lizhiyuan 2006年10月31日, 星期二 00:09  回复(0) |  引用(0) 加入博采

MCS-51单片机内部结构  (作者置顶)

更多资料  http://www.99daili.com

MCS-51单片机内部结构


    8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。
    8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:

    ·中央处理器:
    中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。

    ·数据存储器(RAM):
    8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。

8051结构图
    ·程序存储器(ROM):
    8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。

    ·定时/计数器(ROM):
    8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。

    ·并行输入输出(I/O)口:
    8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。

    ·全双工串行口:
    8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。

    ·中断系统:
    8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。

    ·时钟电路:
    8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。
    下图是MCS-51系列单片机的内部结构示意图。
8051内部结构示意图

     MCS-51的引脚说明:
    MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:

    ·Pin20:接地脚。

    ·Pin40:正电源脚,正常工作或对片内EPROM烧写程序时,接+5V电源。

    ·Pin19:时钟XTAL1脚,片内振荡电路的输入端。

    ·Pin18:时钟XTAL2脚,片内振荡电路的输出端。
    8051的时钟有两种方式,一种是片内时钟振荡方式,但需在18和19脚外接石英晶体(2-12MHz)和振荡电容,振荡电容的值一般取10p-30p。另外一种是外部时钟方式,即将XTAL1接地,外部时钟信号从XTAL2脚输入。
8051引脚图
    ·输入输出(I/O)引脚:
    Pin39-Pin32为P0.0-P0.7输入输出脚,Pin1-Pin1为P1.0-P1.7输入输出脚,Pin21-Pin28为P2.0-P2.7输入输出脚,Pin10-Pin17为P3.0-P3.7输入输出脚,这些输入输出脚的功能说明将在以下内容阐述。
  ·Pin9:RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指钟写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态如下表:
8051时钟电路
    8051的复位方式可以是自动复位,也可以是手动复位,见下图。此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。

8051时钟电路
特殊功能寄存器初始态特殊功能寄存器初始态
ACC00HB00H
PSW00HSP07H
DPH00HTH000H
DPL00HTL000H
IPxxx00000BTH100H
IE0xx00000BTL100H
TMOD00HTCON00H
SCONxxxxxxxxBSBUF00H
P0-P31111111BPCON0xxxxxxxB

    ·Pin30:ALE/当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。
    如果单片机是EPROM,在编程其间,将用于输入编程脉冲。

    ·Pin29:当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。

    ·Pin31:EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。显然,对内部无程序存储器的8031,EA端必须接地。
    在编程时,EA/Vpp脚还需加上21V的编程电压。

- 作者: lizhiyuan 2006年10月31日, 星期二 00:07  回复(3) |  引用(0) 加入博采

MCS-51单片机主要应用特性  (作者置顶)
 更多资料 http://www.99daili.com

MCS-51单片机主要应用特性


    MCS-51单片机是美国INTE公司于1980年推出的产品,与MCS-48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍与MCS-51单片机作为代表进行理论基础学习。我们也以这一代表性的机型进行系统的讲解。
    MCS-51系列单片机主要包括8031、8051和8751等通用产品,其主要功能如下:
    ·8位CPU
    ·4kbytes 程序存储器(ROM)
    ·128bytes的数据存储器(RAM)
    ·32条I/O口线
    ·111条指令,大部分为单字节指令
    ·21个专用寄存器
    ·2个可编程定时/计数器
    ·5个中断源,2个优先级
    ·一个全双工串行通信口
    ·外部数据存储器寻址空间为64kB
    ·外部程序存储器寻址空间为64kB
    ·逻辑操作位寻址功能
    ·双列直插40PinDIP封装
    ·单一+5V电源供电
8039微缩图
    MCS-51以其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“名机”,为以后的其它单片机的发展奠定了基础。正因为其优越的性能和完善的结构,导致后来的许多厂商多沿用或参考了其体系结构,有许多世界大的电气商丰富和发展了MCS-51单片机,象PHILIPS、Dallas、ATMEL等著名的半导体公司都推出了兼容MCS-51的单片机产品,就连我国的台湾WINBOND公司也发展了兼容C51(人们习惯将MCS-51简称C51,如果没有特别声明,二者同指MCS-51系列单片机)的单片机品种。
    近年来C51获得了飞速的发展,C51的发源公司INTEL由于忙于开发PC及高端微处理器而无精力继续发展自己的单片机,而由其它厂商将其发展,最典型的是PHILIPS和ATML公司,PHILIPS公司主要是改善其性能,在原来的基础上发展了高速I/O口,A/D转换器,PWM(脉宽调制)、WDT等增强功能,并在低电压、微功耗、扩展串行总线(I2C)和控制网络总线(CAN)等功能加以完善。

    PHILIPS公司在发展C51的低功耗,高速度和增强型功能上作了不少贡献,当初主要由其来发展C51单片机,他们的83Cxx和87Cxx系列省去了并行扩展总线,适合于作为家用电器类控制的经济型单片机。
    ATMEL公司推出的AT89Cxx系列兼容C51的单片机,完美地将Flash(非易失闪存技术)EEPROM与80C51内核结合起来,仍采用C51的总体结构和指令系统,Flash的可反擦写程序存储器能有效地降低开发费用,并能使单片机作多次重复使用。
    Siemens公司也沿用C51的内核,相继推出了C500系列单片机,在保持了与C51指令兼容的前提下,其产品的性能得到了进一步的提升,特别是在抗干扰性能,电磁兼容和通信控制总线功能上独树一帜,其产品常用于工作环境恶劣的场合。亦适用于通信和家用电器控制领域。
    还有台湾的WINBOND公司亦开发了一系列兼容C51的单片机,其产品通常具备丰富的功能特性,而且与其质优价廉在市场也占有一定的分额。
    下表是80C51系列单片机的主要分类及功能特性:

系列典型芯片I/O口定时/计数器中断源串行通信口片内RAM片内ROM说明
51系列80C314x8位2x16位51128字节 
80C514x8位2x16位51128字节4kB掩膜ROM 
87C514x8位2x16位51128字节4kBEPROM 
89C514x8位2x16位51128字节4kBEEPROM 
52系列80C324x8位2x16位61256字节 
80C514x8位2x16位61256字节8kB掩膜ROM 
87C524x8位2x16位61256字节4kBEPROM 
89C524x8位2x16位61256字节4kBEEPROM 

--------------------------------------------------------------------------------
8051是MCS-51系列单片机中的代表产品,它内部集成了功能强大的中央处理器,包含了硬件乘除法器、21个专用控制寄存器、4kB的程序存储器、128字节的数据存储器、4组8位的并行口、两个16位的可编程定时/计数器、一个全双工的串行口以及布尔处理器。

MCS-51具有比较大的寻址空间,地址线宽达16条,即外部数据存储器和程序存储器的寻址范围达216=64kB,这作为单片机控制来说已是比较大的,这同时具备对I/O口的访问能力。此外,MCS-51采用模块化结构,可方便地增删一个模块就可引脚和指令兼容的新产品。从而容易使产品形成系列化。

由于MCS-51集成了几乎完善的8位中央处理单元,处理功能强,中央处理单元中集成了方便灵活的专用寄存器,硬件的加、减、乘、除法器和布尔处理机及各种逻辑运算和转移指令,这给应用提供了极大的便利。

MCS-51的指令系统近乎完善,指令系统中包含了全面的数据传送指令、完善的算术和逻辑运算指令、方便的逻辑操作和控制指令、对于编程来说,是相当灵活和方便的。
MCS-51单片机的工作频率为2-12MHz,当振荡频率为12MHz时,一个机器周期为1us,这个速度应该说是比较快的。

8051中集成了完善的各种中断源,用户可十分方便地控制和使用其功能,使得它的应用范围加大,可以说它可以满足绝大部分的应用场合。

MCS-51把微型计算机的主要部件都集成在一块心片上,使得数据传送距离大大缩短,可靠性更高,运行速度更块。由于属于芯片化的微型计算机,各功能部件在芯片中的布局和结构达最优化,抗干扰能力加强,工作亦相对稳定。因此,在工业测控系统中,使用单片机是最理想的选择。单片机属于典型的嵌入式系统,所以它是低端控制系统最佳器件。

MCS-51的开发环境要求较低,软件资源十分丰富,介绍其功能特性书籍和开发软件随处可取,只需配备一台PC(个人电脑——对电脑的配置基本上无要求),一台仿真编程器即可实现产品开发,早期的开发软件多使用DOS版本,随着Windows视窗软件的普及,现在几乎都使用Windows版本,并且软件种类繁多,琳琅满目,在众多的单片机品种中,C51的环境资源是最丰富的,这给C51用户带来极大的便利。

- 作者: lizhiyuan 2006年10月31日, 星期二 00:06  回复(1) |  引用(0) 加入博采

MCS-51的串行通信口  (作者置顶)

更多资料  http://www.99daili.com

MCS-51的串行通信口

MCS-51单片机内部有一个全双工的串行通信口,即串行接收和发送缓冲器(SBUF),这两个在物理上独立的接收发送器,既可以接收数据也可以发送数据。但接收缓冲器只能读出不能写入,而发送缓冲器则只能写入不能读出,它们的地址为99H。这个通信口既可以用于网络通信,亦可实现串行异步通信,还可以构成同步移位寄存器使用。如果在传行口的输入输出引脚上加上电平转换器,就可方便地构成标准的RS-232接口。下面我们分别介绍。

    [1]. 基本概念

    数据通信的传输方式
    常用于数据通信的传输方式有单工、半双工、全双工和多工方式。

    单工方式:数据仅按一个固定方向传送。因而这种传输方式的用途有限,常用于串行口的打印数据传输与简单系统间的数据采集。

    半双工方式:数据可实现双向传送,但不能同时进行,实际的应用采用某种协议实现收/发开关转换。

    全双工方式:允许双方同时进行数据双向传送,但一般全双工传输方式的线路和设备较复杂。

    多工方式:以上三种传输方式都是用同一线路传输一种频率信号,为了充分地利用线路资源,可通过使用多路复用器或多路集线器,采用频分、时分或码分复用技术,即可实现在同一线路上资源共享功能,我们盛之为多工传输方式。


    串行数据通信两种形式
    异步通信
    在这种通信方式中,接收器和发送器有各自的时钟,它们的工作是非同步的,异步通信用一帧来表示一个字符,其内容如下:一个起始位,仅接着是若干个数据位,图2是传输45H的数据格式。

    同步通信
    同步通信格式中,发送器和接收器由同一个时钟源控制,为了克服在异步通信中,每传输一帧字符都必须加上起始位和停止位,占用了传输时间,在要求传送数据量较大的场合,速度就慢得多。同步传输方式去掉了这些起始位和停止位,只在传输数据块时先送出一个同步头(字符)标志即可。

    同步传输方式比异步传输方式速度快,这是它的优势。但同步传输方式也有其缺点,即它必须要用一个时钟来协调收发器的工作,所以它的设备也较复杂。
定时/计数器内部结构
    串行数据通信的传输速率
    串行数据传输速率有两个概念,即每秒转送的位数bps(Bit per second)和每秒符号数—波特率(Band rate),在具有调制解调器的通信中,波特率与调制速率有关。

    [2]. MCS-51的串行口和控制寄存器

    串行口控制寄存器
    MCS-51单片机串行口寄存器结构如图3所示。SBUF为串行口的收发缓冲器,它是一个可寻址的专用寄存器,其中包含了接收器和发送器寄存器,可以实现全双工通信。但这两个寄存器具有同一地址(99H)。MCS-51的串行数据传输很简单,只要向发送缓冲器写入数据即可发送数据。而从接收缓冲器读出数据即可接收数据。

    此外,从图中可看出,接收缓冲器前还加上一级输入移位寄存器,MCS-51这种结构目的在于接收数据时避免发生数据帧重叠现象,以免出错,部分文献称这种结构为双缓冲器结构。而发送数据时就不需要这样设置,因为发送时,CPU是主动的,不可能出现这种现象。
定时/计数器内部结构
    串行通信控制寄存器
    在上一节我们已经分析了SCON控制寄存器,它是一个可寻址的专用寄存器,用于串行数据的通信控制,单元地址是98H,其结构格式如下:

  1  SCON寄存器结构
SCOND7D6D5D4D3D2D1D0
SM0SM1SM2RENTB8RB8TIRI
位地址9FH9EH8DH9CH9BH9AH99H98H

    下面我们对各控制位功能介绍如下:
    (1).SM0、SM1:串行口工作方式控制位。
        SM0,SM1    工作方式
            00      方式0
            01      方式1
            10      方式2
            11      方式3


    (2).SM2:多机通信控制位。
    多机通信是工作于方式2和方式3,SM2位主要用于方式2和方式3。接收状态,当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接受到的数据放弃。当SM2=0时,就不管第位数据是0还是1,都难得数据送入SBUF,并发出中断申请。
    工作于方式0时,SM2必须为0。


    (3).REN:允许接收位。
    REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。

    (4).TB8:发送接收数据位8。
    在方式2和方式3中,TB8是要发送的——即第9位数据位。在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。

    (5).RB8:接收数据位8。
    在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。

    (6).TI:发送中断标志位。
    可寻址标志位。方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件清“0”。

    (7).RI:接收中断标志位。
    可寻址标志位。接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成。

    电源管理寄存器PCON
    PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,单元地址是87H,其结构格式如下:

  2  PCON电源管理寄存器结构
PCOND7D6D5D4D3D2D1D0
位符号SMOD---GF1GF0PDIDL
    在CHMOS型单片机中,除SMOD位外,其他位均为虚设的,SMOD是串行口波特率倍增位,当SMOD=1时,串行口波特率加倍。系统复位默认为SMOD=0。

    中断允许寄存器IE
    中断允许寄存器在前一节中已阐述,这里重述一下对串行口有影响的位ES。ES为串行中断允许控制位,ES=1允许串行中断,ES=0,禁止串行中断。

  3  IE中断允许控制寄存器结构
位符号EA--ESET1EX1ET0EX0
位地址AFHAEHADHACHABHAAHA9HA8H
[完]

- 作者: lizhiyuan 2006年10月31日, 星期二 00:01  回复(1) |  引用(0) 加入博采

AT89S51单片机实验及实践教程专辑[目录]  (作者置顶)

http://www.99daili.com    有全部下载

目 录


第一章 AT89S51单片机实验及实践系统板简介┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅1
第二章 Keil  C软件使用┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅14
第三章 AT89S51单片机下载器软件使用┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅25
第四章 实验及实践课题┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅28
1. 闪烁灯┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅28
2. 模拟开关灯┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅31
3. 多路开关状态指示┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅33
4. 广告灯的左移右移┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅37
5. 广告灯(利用取表方式)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅40
6. 报警产生器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅43
7. I/O并行口直接驱动LED显示┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅46
8. 按键识别方法之一┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅49
9. 一键多功能按键识别技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅53
10. 00-99计数器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅57
11. 00-59秒计时器(利用软件延时)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅60
12. 可预置可逆4位计数器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅63
13. 动态数码显示技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅67
14. 4×4矩阵式键盘识别技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅70
15. 定时计数器T0作定时应用技术(一)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅79
16. 定时计数器T0作定时应用技术(二)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅84
17. 99秒马表设计┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅89
18. “嘀、嘀、……”报警声┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅95
19. “叮咚”门铃┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅99
20. 数字钟(★)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅105
21. 拉幕式数码显示技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅114
22. 电子琴┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅121
23. 模拟计算器数字输入及显示┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅134
24. 8×8LED点阵显示技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅141
25. 点阵LED“0-9”数字显示技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅146
26. 点阵式LED简单图形显示技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅153
27. ADC0809 A/D转换器基本应用技术┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅157
28. 数字电压表┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅163
29. 两点间温度控制┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅167
30. 四位数数字温度计┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅172
31. 6位数显频率计数器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅177
32. 电子密码锁设计┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅180
33. 4×4键盘及8位数码管显示构成的电子密码锁┅┅┅┅┅┅┅┅┅┅┅186
34. 带有存储器功能的数字温度计-DS1624技术应用┅┅┅┅┅┅┅┅┅┅199
35. DS18B20数字温度计使用┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅211

- 作者: lizhiyuan 2006年09月9日, 星期六 09:22  回复(1) |  引用(0) 加入博采

[推荐]申请自己的网页播放器  (作者置顶)

可以自己选择界面和歌曲,推荐...

寒萧在线多用户网页背景音乐播放器免费申请

寒萧在线多用户网页背景音乐播放器现拥有播放器风格13种

免费申请永久使用

http://www.qqtan.be/bj/

http://qqtan.be/bj/

- 作者: lizhiyuan 2006年02月22日, 星期三 23:05  回复(12) |  引用(0) 加入博采

[博客技巧]图片播放器  (作者置顶)
代码如下,供大家参考.  http://lizhiyuan.bokee.com
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin

var Onerotate_delay = 2000; // delay in milliseconds (5000 = 5 secs)
Onecurrent = 0;
var OneLinks = new Array(3);
OneLinks[0] = "#";
OneLinks[1] = "#";
OneLinks[2] = "#";
function Onenext() {
if (document.Oneslideform.Oneslide[Onecurrent+1]) {
document.images.Oneshow.src = document.Oneslideform.Oneslide[Onecurrent+1].value;
document.Oneslideform.Oneslide.selectedIndex = ++Onecurrent;
}
else Onefirst();
}
function Oneprevious() {
if (Onecurrent-1 >= 0) {
document.images.Oneshow.src = document.Oneslideform.Oneslide[Onecurrent-1].value;
document.Oneslideform.Oneslide.selectedIndex = --Onecurrent;
}
else Onelast();
}
function Onefirst() {
Onecurrent = 0;
document.images.Oneshow.src = document.Oneslideform.Oneslide[0].value;
document.Oneslideform.Oneslide.selectedIndex = 0;
}
function Onelast() {
Onecurrent = document.Oneslideform.Oneslide.length-1;
document.images.Oneshow.src = document.Oneslideform.Oneslide[Onecurrent].value;
document.Oneslideform.Oneslide.selectedIndex = Onecurrent;
}
function Oneap(text) {
document.Oneslideform.Oneslidebutton.value = (text == "Stop") ? "Start" : "Stop";
Onerotate();
}
function Onechange() {
Onecurrent = document.Oneslideform.Oneslide.selectedIndex;
document.images.Oneshow.src = document.Oneslideform.Oneslide[Onecurrent].value;
}
function Onerotate() {
if (document.Oneslideform.Oneslidebutton.value == "Stop") {
Onecurrent = (Onecurrent == document.Oneslideform.Oneslide.length-1) ? 0 : Onecurrent+1;
document.images.Oneshow.src = document.Oneslideform.Oneslide[Onecurrent].value;
document.Oneslideform.Oneslide.selectedIndex = Onecurrent;
window.setTimeout("Onerotate()", Onerotate_delay);
}
}
function Onetransport(){
window.location=OneLinks[Onecurrent]
}
// End -->
</SCRIPT>
<center><TABLE border="0" cellspacing="0" cellpadding="0">
<TR>
<TD>
<form name="Oneslideform" >
<DIV align="center">
<TABLE width="150" border="1" cellspacing="0" cellpadding="4">
<TR>
<TD bgcolor="#FFFFFF"> <DIV align="center"><A href="javascript:Onetransport()">
<IMG src="http://lizhiyuan.bokee.com/inc/fuwa11.jpg" width="160" height="120" name="Oneshow" border="0"></A></DIV></TD>
</TR>
<TR>
<TD bgcolor="#0066FF">
<DIV align="center">
<SELECT name="Oneslide" onChange="Onechange();">
<OPTION value="http://lizhiyuan.bokee.com/inc/fuwa11.jpg" selected>图片 1</OPTION>
<OPTION value="http://lizhiyuan.bokee.com/inc/fuwa12.jpg">图片 2</OPTION>
<OPTION value="http://lizhiyuan.bokee.com/inc/fuwa13.jpg">图片 3</OPTION>
<OPTION value="http://lizhiyuan.bokee.com/inc/fuwa14.jpg">图片 4</OPTION>
<OPTION value="http://lizhiyuan.bokee.com/inc/fuwa15.jpg">图片 5</OPTION>
<OPTION value="http://lizhiyuan.bokee.com/inc/fuwa16.jpg">图片 6</OPTION>
<OPTION value="http://lizhiyuan.bokee.com/inc/fuwa17.jpg">图片 7</OPTION>
</SELECT>
</DIV></TD>
</TR>
<TR>
<TD bgcolor="#0066FF">
<DIV align="center">
<INPUT type=button onClick="Oneprevious();" value="<<" title="上一个">
<INPUT type=button name="Oneslidebutton" onClick="Oneap(this.value);" value="开始循环" title="自动显示">
<INPUT type=button onClick="Onenext();" value=">>" title="下一个">
</DIV></TD>
</TR>
</TABLE>
</DIV>
</form>
</TD>
</TR>
</TABLE></center>

- 作者: lizhiyuan 2006年02月20日, 星期一 15:01  回复(0) |  引用(0) 加入博采

[博客技巧]发放GMAIL邀请  (作者置顶)

只有30个名额,需要的请留下你的EMAIL. 

- 作者: lizhiyuan 2006年02月20日, 星期一 13:18  回复(15) |  引用(0) 加入博采

[博客技巧]仿QQ导航菜单  (作者置顶)

 

代码如下,供大家参考. http://lizhiyuan.bokee.com

<style type="text/css">
.titleStyle{
background-color:#008800;color:#ffffff;border-top:1px solid #FFFFFF;font-size:9pt;cursor:hand;
}
.contentStyle{
background-color:#eeffee;color:blue;font-size:9pt;
}

a{
color:blue;
}
body{
font-size:9pt;
}
</style>


<script language="JavaScript">
<!--
var layerTop=20;
var layerLeft=30;
var layerWidth=140;
var titleHeight=20;
var contentHeight=200;
var stepNo=10;

var itemNo=0;runtimes=0;
document.write('<span id=itemsLayer style="position:relative;overflow:hidden;border:1px solid #008800;left:'+layerLeft+';top:'+layerTop+';width:'+layerWidth+';">');

function addItem(itemTitle,itemContent){
itemHTML='<div id=item'+itemNo+' itemIndex='+itemNo+' style="position:relative;left:0;top:'+(-contentHeight*itemNo)+';width:'+layerWidth+';"><table width=100% cellspacing="0" cellpadding="0">'+
'<tr><td height='+titleHeight+' onclick=changeItem('+itemNo+') class="titleStyle" align=center>'+itemTitle+'</td></tr>'+
'<tr><td height='+contentHeight+' class="contentStyle">'+itemContent+'</td></tr></table></div>';
document.write(itemHTML);
itemNo++;
}

addItem('欢迎','<BR> 欢迎光临单片机学习!<BR><BR><BR><center><a href="http://lizhiyuan.bokee.com/catalog_2005.html">2005年目录</a> <BR><BR><a href="http://lizhiyuan.bokee.com/catalog_2006.html">2006年目录</a> <BR><BR></center>');
addItem('博客栏目','<center><a href="http://lizhiyuan.bokee.com/catalog_2006.html#category265108">单片机学习资料</a> <BR><BR><a href="http://lizhiyuan.bokee.com/catalog_2006.html#category289867">免费资料</a> <BR><BR><a href="http://lizhiyuan.bokee.com/catalog_2006.html#category292905">文摘</a> <BR><BR><a href="http://lizhiyuan.bokee.com/catalog_2006.html#category292908">照片</a><BR><BR><a href="http://lizhiyuan.bokee.com/catalog_2006.html#category292909">博客技巧</a><BR><BR><a href="http://lizhiyuan.bokee.com/catalog_2006.html#category292910">RFID射频识别</a><BR><BR><a href="http://lizhiyuan.bokee.com/catalog_2006.html#category292911">山西人家</a></center>');
addItem('推荐文章','<center><a href="http://lizhiyuan.bokee.com/4226054.html">[博客技巧]展开式菜单</a> <BR><BR><a href="http://lizhiyuan.bokee.com/4220403.html">[照片]第一集</a> <BR><BR><a href="http://lizhiyuan.bokee.com/4220403.html">[单片机学习]AT89S51教程</a> <BR><BR></center>');
addItem('常用链接','<center><a href="http://cafe.hanbbs.com/lizhiyuan">单片机论坛 </a> <BR><BR><a href="http://cafe.hanbbs.com/changping">人在昌平</a> <BR><BR><a href="http://disk.zzlygo.com/myspace.aspx?username=lizhiyuan">我的网络硬盘</a> <BR><BR></center>');
addItem('友情链接','<center><a href="http://lizhiyuan.bokee.com/catalog_2006.html#category265108">征集中...</a> <BR><BR></center>');
addItem('联系方式','<BR><center>QQ:13977422</center><BR><center>Email:lzy@bkmasic.cn</center>');

document.write('</span>')
document.all.itemsLayer.style.height=itemNo*titleHeight+contentHeight;

toItemIndex=itemNo-1;onItemIndex=itemNo-1;

function changeItem(clickItemIndex){
toItemIndex=clickItemIndex;
if(toItemIndex-onItemIndex>0) moveUp(); else moveDown();
runtimes++;
if(runtimes>=stepNo){
onItemIndex=toItemIndex;
runtimes=0;}
else
setTimeout("changeItem(toItemIndex)",10);
}

function moveUp(){
for(i=onItemIndex+1;i<=toItemIndex;i++)
eval('document.all.item'+i+'.style.top=parseInt(document.all.item'+i+'.style.top)-contentHeight/stepNo;');
}

function moveDown(){
for(i=onItemIndex;i>toItemIndex;i--)
eval('document.all.item'+i+'.style.top=parseInt(document.all.item'+i+'.style.top)+contentHeight/stepNo;');
}
changeItem(0);
//-->
</script>

- 作者: lizhiyuan 2006年02月18日, 星期六 00:00  回复(0) |  引用(0) 加入博采

[照片]福娃  (作者置顶)

- 作者: lizhiyuan 2006年02月17日, 星期五 13:30  回复(0) |  引用(0) 加入博采

申请友情链接  (作者置顶)

申请友情链接

                                      

欢迎申请友情链接
申请链接前请仔细阅读以下条款,谢谢合作!

一、申请链接的网站应美观大方,有一定的内容,且内容健康丰富,并基本建设完成;
二、申请链接的网站不得有反动、色情、暴力、迷信、赌博等不良内容,以及网站名称或内容有违反国家有关法律法规的;
三、网站不得含有恶意代码与插件;
四、在申请链接本站前,请您做好本站的链接。
五、申请链接的格式:
1、贵站名称;
2、贵站网络地址(LOGO和网站地址);
LOGO链接要求使用88×31大小的标准!如不符标准的LOGO将不被添加到连接中!
3、贵站性质(基本信息与简单介绍);
4、说明链接是否做好
5、举例:
网站名称:单片机学习
网站LOGO:http://lizhiyuan.bokee.com/inc/logo060119.gif
网站地址:http://lizhiyuan.bokee.com
网站性质:个人综合
现已经做好贵站链接,现申请链接。谢谢!!!

六、如果以上要求您都满足,请在下面回复,留下您的申请,我将在第一时间做好您的链接!。
七、本站的logo及链接代码
(一)LOGO效果图:

(二) LOGO链接代码:

- 作者: lizhiyuan 2006年02月15日, 星期三 13:58  回复(18) |  引用(0) 加入博采

隐藏菜单  (作者置顶)
导航菜单
自我介绍
单片机资料
VC++学习
文摘
照片
博客技巧
射频识别
山西人家
人在昌平
留言板
其它
其它
友情链接
与我联系

- 作者: lizhiyuan 2006年02月8日, 星期三 16:06  回复(0) |  引用(0) 加入博采

展开式菜单  (作者置顶)
 
 单片机资料 [5]
文章1
文章2
文章3
文章4
文章5
 VC++学习 [3]
文章1
文章2
文章3
 文摘 [3]
文章1
文章2
文章3
 照片 [3]
文章1
文章2
文章3

- 作者: lizhiyuan 2006年01月18日, 星期三 13:42  回复(1) |  引用(0) 加入博采

索引表格  (作者置顶)
<> 
文章主题
摘录作者
发布时间
备注
邻居
2005-07- 05
001

网页经典代码

邻居 
2005-07-05 
002 
第1页 

- 作者: lizhiyuan 2006年01月17日, 星期二 22:57  回复(0) |  引用(0) 加入博采

球华人用MSN红心签名表达爱中国,支持2008北京奥运会。

球华人用MSN红心签名表达爱中国,支持2008北京奥运会。

  最近,每当你登录MSN,一定会收到很多好友发来的信息:“MSN名字前面请加 (L)China,支持2008北京奥运会”。众多MSN用户在用他们的实际行动,支持2008北京奥运会,表达对祖国的热爱之情。

  2008年北京奥运会获得了全球范围的瞩目,我们更感觉到全球华人对中国奥运会的热切支持。MSN中国发起“我爱奥运”MSN签名活动,通过MSN聊天工具这一遍布全球的即时聊天工具传递全球华人对祖国的热爱,对奥运的支持,对2008北京奥运会成功举行的祝愿。让我们一起为祖国祈福,为2008北京奥运喝彩!

  来自MSN的统计数字显示,截至今日下午3时,已有超过230万MSN用户使用了这个签名。打开MSN列表已经“红心”一片。请赶快加入这个热烈的行动吧!

  参与方式如下:

  1. 将(L)China(半角英文状态下操作),加上你对奥运会的祝福和希望,按如下步骤,加入MSN签名档:


点击下拉菜单后,在下拉菜单中点击选项


添加好后,点击确定

  小贴士:如果你看不到红心,请在英文状态下,先敲入一对括号“()”,然后在括号中间敲入“L”,红心即跃然屏上。

  2. 将MSN名字前面请加 “(L)China”(半角英文状态下操作),支持2008北京奥运,请转发您的MSN朋友。

  3. 下面是一些网友写好的例子,供用户参考,也欢迎您自己创建个性的奥运签名:

  (L) China (L)奥运

  (L) China 为奥运喝彩

  (L) China 我要做奥运志愿者

  (L) China 为奥运少开一天车

  (L) China 帮助参加奥运的游客们


图为参加活动的MSN好友列表

- 作者: lizhiyuan 2008年04月17日, 星期四 23:17  回复(1) |  引用(0) 加入博采

POSIX多线程程序设计
·出版社:中国电力出版社
·ISBN:750831395X
·国别:中国大陆
·版次:1
·精简装:平装

本 书深入描述了IEEE的开放系统接口标准-PWSIX线程,通常称为Ptherads标准。本书首先解释了线程的基本概念,包括异步编程、线程的生命周期 和同步机制;然后讨论了题,并给出了避免错误和提高性等问题的有价值的建议。本书使用了大量注释过的实例来解释实际的概念,并包括Pthreads的简装 索引和对标准化的展望。

本书适合有经验的C语言程序员阅读,也适合多线程编程人员参考。
目 录序言                  

                   

 第1章 概述                  

 1.1 舀水的程序员                  

 1.2 术语定义                  

 1.3 异步编程是直观的                  

 1.4 关于本书的实例                  

 1.5 异步编程举例                  

 1.6 线程的好处                  

 1.7 线程的代价                  

 1.8 选择线程还是不用线程                  

 1.9 POSIX线程概念                  

                   

 第2章 线程                  

 2.1 建立和使用线程                  

 2.2 线程的生命周期                  

                   

 第3章 同步                  

 3.1 不变量. 临界区和谓词                  

 3.2 互斥量                  

 3.3 条件变量                  

 3.4 线程间的内存可视性                  

                   

 第4章 使用线程的几种方式                  

 4.1 流水线                  

 4.2 工作组                  

 4.3 客户/服务器                  

                   

 第5章 线程高级编程                  

 5.1 一次性初始化                  

 5.2 属性                  

 5.3 取消                  

 5.4 线程私有数据                  

 5.5 实时调度                  

 5.6 线程和核实体                  

                   

 第6章 POSIX针对线程的调整                  

 6.1 fork                  

 6.2 exec                  

 6.3 进程结束                  

 6.4 stdio                  

 6.5 线程安全的函数                  

 6.6 信号                  

                   

 第7章 Real code                  

 7.1 扩展同步                  

 7.2 工作队列管理器                  

 7.3 对现存库的处理                  

                   

 第8章 避免调试的提示                  

 8.1 避免不正确的代码                  

 8.2 避免性能问题                  

                   

 第9章 POSIX多线程快速参考                  

 9.1 POSIX 1003.1c-1995选项                  

 9.2 POSIX 1003.1c-1995限制                  

 9.3 POSIX 1003.1c-1995接口                  

                   

 第10章 标准化过程展望                  

 10.1 X/Open XSH5[UNIX98]                  

 10.2 POSIX 1003.1j                  

 10.3 POSIX 1003.14                  

                   

 参考文献                  

                   

 因特网上的线程资源       

- 作者: lizhiyuan 2007年07月9日, 星期一 17:27  回复(0) |  引用(0) 加入博采

采用AT89C2051制作的智能时钟
摘要:采用AT89C2051制作的智能时钟 查看全文

- 作者: lizhiyuan 2007年06月12日, 星期二 08:34  回复(0) |  引用(0) 加入博采

单片机技术讲座3[视频]

- 作者: lizhiyuan 2007年03月26日, 星期一 11:01  回复(0) |  引用(0) 加入博采