EDA365电子工程师网

标题: 针对初学51单片机的资料,想少走弯路就看看 , 有问有答啊 [打印本页]

作者: ArthurGXH    时间: 2012-2-16 20:19
标题: 针对初学51单片机的资料,想少走弯路就看看 , 有问有答啊
本帖最后由 ArthurGXH 于 2012-2-20 21:39 编辑 + N& y/ o8 P, ]* e

' X" G  K/ m5 g" H首先我要声明的是,此帖不是做广告,不是宣传某种单片机。我仅用这个公司的单片机做过一个产品和一个工具。他们的资料非常好,比一般的书籍好。

STC89C51RC-RD 系列用户手册.pdf

4.65 MB, 下载次数: 26143, 下载积分: 威望 -5


作者: ArthurGXH    时间: 2012-2-18 08:37
若初学者能够有耐心地看完里面大多数内容,并将里面大多数程序在仿真器上调试一下,则可以完全学会51单片机编程。我用51单片机开发产品时,也只看这一种资料。
作者: ArthurGXH    时间: 2012-2-18 08:56
初学者也不必要买仿真器,到目前我还没有买过任何仿真器。可以用STC的单片机,按《STC89C51RC-RD 系列用户手册.pdf 》第13页焊接一个板,就可以将程序烧录到单片机中。
3 {4 d" r, C3 D# z; K" }; r! `3 U也可以用SST89E564单片机,利用官方的监控程序制作成简易仿真,可以联上Keil C调试程序。
作者: JIMDENG    时间: 2012-2-20 19:32
谢谢好同志!
作者: ArthurGXH    时间: 2012-2-20 21:21
JIMDENG 发表于 2012-2-20 19:32
9 m% N5 i8 t, s谢谢好同志!
- S! {# g$ O5 Q
我希望初学者都能少走弯路,尽快学会51系列单片机。在对单片机有个初步认识后,尽快去学ARM。平时多写点程序是很有必要的。如果有哪里看不懂的,可以跟帖。我看到后,会给出解释的。
作者: 清风笑    时间: 2012-2-27 20:40
谢谢分享,现在正在学习单片机,希望有帮助哈,谢谢了哦
作者: zanyang2010    时间: 2012-3-5 18:01
avr和pic哪个好学啊
作者: zanyang2010    时间: 2012-3-5 18:02
avr和pic哪个好学啊
作者: ArthurGXH    时间: 2012-3-5 20:56
zanyang2010 发表于 2012-3-5 18:02 & f7 u! `, S  j/ U7 {
avr和pic哪个好学啊
, X6 j5 w  w0 m2 y$ d: b
我还没有用过avr单片机,用过PIC18F系列的单片机,看看芯片资料就做项目,没什么难度。只要你真正理解了51单片机,学PIC单片机就没难度。
作者: 小小PCB手    时间: 2012-4-11 22:10
单片机找工作,好多都需要模电和数电的能力,硬件方面我觉得也挺重要的。
作者: ArthurGXH    时间: 2012-4-16 18:27
小小PCB手 发表于 2012-4-11 22:10 9 U* j) C$ Q) d; \# L
单片机找工作,好多都需要模电和数电的能力,硬件方面我觉得也挺重要的。
: H$ _" f3 B' i, B
你说的没错,没有模电和数电的知识,怎么将单片机用起来呢?
作者: zhema    时间: 2012-4-19 14:21
谢了‘’‘’‘’‘’‘’‘’‘
作者: zhema    时间: 2012-4-19 14:24
还不错。。。。。。。。
作者: 可怕的呆    时间: 2012-5-9 13:12
谢谢分享
作者: hi_yjs    时间: 2012-6-5 10:41
谢谢~下来看看~
作者: cyzqq    时间: 2012-6-23 19:21
谢谢分享
作者: hxs_ui    时间: 2012-6-26 19:27
刚买了开发板,正准备学,多谢
作者: ArthurGXH    时间: 2012-6-27 21:28
hxs_ui 发表于 2012-6-26 19:27
/ ?, U- b: q9 k) |刚买了开发板,正准备学,多谢

5 ?' E; K" J7 \不用客气,尽量把pdf中的程序都调试一遍。遇到问题,可以直接问我。
作者: 刘芸    时间: 2012-7-14 23:22
真的非常感谢楼主!1我回认真学好的,
作者: ArthurGXH    时间: 2012-7-14 23:48
刘芸 发表于 2012-7-14 23:22 * w2 W! `$ y3 l' H5 E7 l
真的非常感谢楼主!1我回认真学好的,
- ^7 x# ^4 A7 b- M1 ?3 A; N& S
不用客气,只要用心学,你会发现51并不难。不懂就问啊。
作者: zhuxiaoxing    时间: 2012-7-16 14:13
太棒了 谢谢楼主  
作者: signory    时间: 2012-7-17 16:04
谢谢分享
作者: songwinlong    时间: 2012-7-21 23:07

作者: linsmt    时间: 2012-7-23 15:41
楼主,没有C基础的如何去学,是不是还要去买开发板之类的是吧
9 Z% L& X& W- K" U2 w4 l9 r
  c, }( q+ d; H1 A  关键是如何去学,先入门
作者: lcywzg2008    时间: 2012-7-25 14:14
下来看看
作者: 黑驴蹄子    时间: 2012-7-25 16:38
我晕,这个不就是STC官网的资料嘛  拿到这来干嘛
6 C4 Z! K% [& D, S4 J5 S3 l  a9 \6 o7 M$ z
学单片机不看手册是瞎学,手册看懂了单片机也就会了
作者: 黑驴蹄子    时间: 2012-7-26 08:24
手册当然是好资料,不是说我是不是老手的问题,单片机老手编程照样需要对应的手册,毕竟单片机编程是基于硬件的
作者: zhuxiaoxing    时间: 2012-7-26 09:57
谢谢楼主.顺便请教个程序.我想用定时器中段实现两个数码管显示00--59;结果数码管一直显示00;不知道问题出在哪,
  A7 _) r! Y' p2 v3 y* d# ~程序如下:
4 T' ^) \! V8 F: z' l#include<reg52.h>0 c  j4 K" h3 e4 V- l
#define uchar unsigned char         //定义uchar uint- I: G# j3 p. e; S+ C. N
#define uint unsigned int
( _2 h6 k; k, l7 `; ~8 Wsbit dula=P2^2;                         //定义数码管段显示
) {( P, F8 c& v- u+ Rsbit weila=P2^3;                //定义数码管位显示
& o7 W, y0 G7 `* f" C3 yuchar code table[]={                //定义数码管显示从0--9
: K. @- q7 l3 j! [4 ~' Q8 |( ^! I0x3f,0x06,0x5b,8 L. k" g2 H8 n8 O2 \3 h1 C# k
0x4f,0x66,0x6d,6 o1 b8 ~! t/ ?4 O% }
0x7d,0x07,0x7f,0x6f};
3 J1 Z: Z5 b! y! A# }4 ?, u1 d9 m0 w# l% u' J
void display(uchar,uchar);        //声明数码管显示函数8 C' F' m0 F2 ?5 V7 l4 W
void delay(uint);                //申明延时函数
( }! F- x  Q: o. B3 m5 z* F' Wuchar num,num1,shi,ge;7 f/ |: t8 q* K. t" v$ r% b0 C
void main()                        //主函数
" @% @( \" n+ {$ [{
7 h" f6 k) s. ?# N  TMOD=0X01;                        //定时方式选择0 B) R+ a5 d6 e7 G! d. i. Y+ n
  TH0=(65536-45872)/256;        //写定时初值# a" ~6 P8 a7 z' X! f
  TL0=(65536-45872)%256;, o) i- \5 ?0 w# ^+ [# {
  EA=1;        //开启总中断
( |' `9 S$ C, }7 F* ~2 J  ET0=1;        //开定时器0中断0 X2 i2 |6 J! m5 A8 }( F# C1 c
  TR0=1;        //启动定时器06 A, c) x" a% Q7 p1 T9 X
  while(1); E3 U/ n# j2 f
  {+ K( R4 b: q9 E
    display(shi,ge);                //数码管显示函数" a3 Y# |/ g2 }' h; _1 t$ l8 S
  }
! t& \+ Z" h( @( z2 A}/ W- f* _2 ?5 {, @, _
6 r8 k& k# j8 }  G1 n- ]
void display(uchar shi,uchar ge)        //显示函数( A3 O9 v- R1 Z2 v+ e. ]" f/ j
{
  C* J8 i6 Q7 J# B1 b( U( U( N. D   dula=1;                        //打开段选
8 X& v6 `* l5 X* U   P0=table[shi];
5 D9 {& s) e* ]: U2 Q) i9 Z   dula=0;' d8 d- |# Z/ r+ m5 D! p, P
   P0=0xff;                        //重置P0 防止数码管乱码% X% k3 @2 ?3 m, P3 Z. c4 f, w4 r2 K% D
   weila=1;
5 K% h$ i6 J5 D& U   P0=0xfe;/ l! X$ B( S0 O1 m/ O
   weila=0;7 r2 q( q6 Z4 C3 ?  j" D* A
   delay(5);) f3 P. Z7 I7 e# o) `. P
  " s' F' e; k1 {0 g
   dula=1;
  u0 w# o; |7 X& r+ H1 l5 E   P0=table[ge];- V) i5 j  O8 O. c+ A
   dula=0;6 X0 @# @* n/ Z: [6 n
   P0=0xff;
7 U0 `7 \# S# @  q$ M   weila=1;
2 _  D6 t1 u$ {& z   P0=0xfd;
  r- ~! g- K4 h) `0 j" ]   weila=0;% ]* E* L1 U- G& w1 r
   delay(5);
6 B$ d# X5 k7 e7 t/ ?# ~}
) |2 I8 {( f, g
2 p0 L# }- d7 L$ W2 h! lvoid delay(uint xms)    //延时函数 延时xms ms; l' Q1 D: ~4 x0 N4 i
{
. r7 C$ O& h+ d5 M4 b   uint i,j;% y6 p, `3 [9 O7 n6 s
   for(i=xms;i>0;i--)* J  G3 v& t+ j  h: X' Y4 t
    for(j=110;j>0;j--);
; a/ j0 [1 _3 j) G. w }' x, o' Z( F& t7 L1 B* `) q& `! l5 |1 [

& p9 J0 y: L$ m$ t" y0 h4 B3 C' H) bvoid T0_Time() interrupt 3   //定时器0中断 定时方式1$ W0 _5 D# J+ O% f
{
4 D# Y7 h8 p3 Z8 j( F; ?9 R TH0=(65536-45872)/256;" ?+ m, f( a& ~! N7 I' I: e' C! n" j
TL0=(65536-45872)%256;
: W  ^; N2 t, S9 p+ u; {1 F num1++;
( i# Q! z# U5 V0 C if(num1==20)      //检测到1s了没有
: ~% ~* @- d3 D8 D% f0 D: L0 C7 @- y   {
1 N. T5 _0 |5 c) p8 P    num1=0;; V5 x! [* |+ E: }4 w0 |
    num++;  L; R7 N& r. P( h: a4 @9 r( {7 b
    if(num==60)   //实现两个数码管从00--59/ }4 i" w6 m3 w' K
    num=0;! m4 c$ g% r$ Q) O
    shi=num/10;
" [7 t' c: R  u7 Y. }    ge=num%10;* i. ?& U2 v& j
    }
) u7 I& [# d& b# c( f}
作者: zhuxiaoxing    时间: 2012-7-26 09:59
黑驴蹄子 发表于 2012-7-26 08:24
6 A! w* B2 I! {+ k* t6 m手册当然是好资料,不是说我是不是老手的问题,单片机老手编程照样需要对应的手册,毕竟单片机编程是基于硬 ...
& c& V. t; m3 y! p
呵呵  有道理  有空来帮我看看下面那个问题啊
作者: tony_wuy    时间: 2012-7-26 15:54
说实在的,如果工作中用STC的,还是要慎重,谁用过谁知道,学习之用还行!
作者: ArthurGXH    时间: 2012-7-26 20:59
本帖最后由 ArthurGXH 于 2012-7-26 21:50 编辑
' x' \1 o/ b5 H0 f" d/ t( V* |
tony_wuy 发表于 2012-7-26 15:54 + P( i  x4 B0 `6 Q
说实在的,如果工作中用STC的,还是要慎重,谁用过谁知道,学习之用还行!

# ]" n/ q; p' m( e
/ ~! H' _& a% q/ u很多人对我说最好别用STC的芯片,包括PIC的技术支持、实习的研究生等,但是我做了一个产品,什么问题也没有。想当年,用台湾民用级的芯片也一样做出稳定的产品,何况是STC的工业级芯片。所以只要有人对我说他用STC芯片出了什么问题,我都会说是你的设计有问题。 不过现在我很少用51,改用功能更强的PIC、ARM。
作者: ArthurGXH    时间: 2012-7-26 21:44
本帖最后由 ArthurGXH 于 2012-7-26 21:51 编辑
0 I1 ~3 @  U4 d7 R! V
zhuxiaoxing 发表于 2012-7-26 09:57 1 u* C$ ?0 R% d- b& |1 M9 p
谢谢楼主.顺便请教个程序.我想用定时器中段实现两个数码管显示00--59;结果数码管一直显示00;不知道问题出在 ...
# T. z" x( [+ ]) c

5 a1 h( h# u+ ?0 R: X: N$ G% S% Y$ w以后请附上原理图,否则别人也只能猜测4 A3 t# b+ e# \: H  B* t
调试方法:    % u* ?( h- }( A2 D* L* R
    1.  猜测display函数有问题,dula、weila是公共端,P0是a~g段对吗?  P0=table[shi]; P0=table[ge]; 应该是要显示的数据,显示了并没有延时,而是再一次又一次的赋值,再延时,这样查表显示的内容根本看不到,而是看到后面的定值(当然有锁存器的例外)。
- {0 C& _5 i2 e" x! H    2. 验证一下中断是否正常工作。若没有仿真器,可以在程序的每秒处亮灭LED 或通过串口发送一些数据到电脑。
- l) I& U/ \. I9 _# O* M" L, n, j    3. 充分发挥想像力,一点一点的缩小范围。- S' i) Z5 t! \5 u1 E0 }; G' S

作者: zhuxiaoxing    时间: 2012-7-27 09:55
ArthurGXH 发表于 2012-7-26 21:44
& V, X2 W( s9 V$ C% n/ S以后请附上原理图,否则别人也只能猜测' ]9 z6 x8 i. |# Q2 N
调试方法:   
0 O" o4 u  r! L( z, c4 b  Z    1.  猜测display函数有问题,dula、weila ...
( M4 }0 p, t$ I- r* L$ q
谢谢  已经找到答案了  定时器0中断写错了  应该是interrupt 1
作者: ArthurGXH    时间: 2012-7-27 22:29
zhuxiaoxing 发表于 2012-7-27 09:55 , a" u( F6 e4 Y5 C( c* I
谢谢  已经找到答案了  定时器0中断写错了  应该是interrupt 1
, g4 y( J$ {  W+ D, x4 l" z
不用客气,找到问题就好。
作者: mylive    时间: 2012-9-21 23:53
没玩过单片机,只画过原理图。。
作者: 1958    时间: 2012-9-26 09:13
谢谢分享,现在正在学习单片机,希望有帮助。
作者: weihuaping118    时间: 2012-9-28 14:22
多谢这位兄弟,我也在学习阶段。
作者: kkwd    时间: 2012-9-29 11:30
多谢分享
作者: 南林维京    时间: 2012-11-27 10:26
路过,看看
作者: chan-cjl    时间: 2015-2-7 14:02
不错
作者: hurry0603037    时间: 2015-9-7 08:51
这个资料下载来看看




欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/) Powered by Discuz! X3.2