EDA365电子论坛网

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

作者: ArthurGXH    时间: 2012-2-16 20:19
标题: 针对初学51单片机的资料,想少走弯路就看看 , 有问有答啊
本帖最后由 ArthurGXH 于 2012-2-20 21:39 编辑
- w% G1 f. P  Y7 `9 d% b; K& R  i0 G5 v, V& a7 o6 f/ r4 E, U
首先我要声明的是,此帖不是做广告,不是宣传某种单片机。我仅用这个公司的单片机做过一个产品和一个工具。他们的资料非常好,比一般的书籍好。

STC89C51RC-RD 系列用户手册.pdf

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


作者: ArthurGXH    时间: 2012-2-18 08:37
若初学者能够有耐心地看完里面大多数内容,并将里面大多数程序在仿真器上调试一下,则可以完全学会51单片机编程。我用51单片机开发产品时,也只看这一种资料。
作者: ArthurGXH    时间: 2012-2-18 08:56
初学者也不必要买仿真器,到目前我还没有买过任何仿真器。可以用STC的单片机,按《STC89C51RC-RD 系列用户手册.pdf 》第13页焊接一个板,就可以将程序烧录到单片机中。( h' `3 x- p* n2 ^3 t9 s
也可以用SST89E564单片机,利用官方的监控程序制作成简易仿真,可以联上Keil C调试程序。
作者: JIMDENG    时间: 2012-2-20 19:32
谢谢好同志!
作者: ArthurGXH    时间: 2012-2-20 21:21
JIMDENG 发表于 2012-2-20 19:32 5 P+ `8 g; p9 |. j2 ]
谢谢好同志!

8 _- [3 D$ n( S我希望初学者都能少走弯路,尽快学会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
" r( X8 ]1 z9 _% \9 ], J7 T7 h8 r6 qavr和pic哪个好学啊
# I. C0 k  r7 W/ X
我还没有用过avr单片机,用过PIC18F系列的单片机,看看芯片资料就做项目,没什么难度。只要你真正理解了51单片机,学PIC单片机就没难度。
作者: 小小PCB手    时间: 2012-4-11 22:10
单片机找工作,好多都需要模电和数电的能力,硬件方面我觉得也挺重要的。
作者: ArthurGXH    时间: 2012-4-16 18:27
小小PCB手 发表于 2012-4-11 22:10 ' w  ~. f& d# Y4 B' Z5 c# b
单片机找工作,好多都需要模电和数电的能力,硬件方面我觉得也挺重要的。

! y* l. L9 V$ g; w4 ?你说的没错,没有模电和数电的知识,怎么将单片机用起来呢?
作者: 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 , Z2 _; j+ n* b4 u0 g
刚买了开发板,正准备学,多谢

$ {5 P# K. ?8 ?) G7 W, v2 z不用客气,尽量把pdf中的程序都调试一遍。遇到问题,可以直接问我。
作者: 刘芸    时间: 2012-7-14 23:22
真的非常感谢楼主!1我回认真学好的,
作者: ArthurGXH    时间: 2012-7-14 23:48
刘芸 发表于 2012-7-14 23:22 * ?# M$ o+ L  p4 r
真的非常感谢楼主!1我回认真学好的,
- u* l0 a4 n. K# G1 m9 A( ?$ 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基础的如何去学,是不是还要去买开发板之类的是吧
: _0 H" c9 }5 g; ~  ^9 |" z2 B* D0 B$ x9 v
  关键是如何去学,先入门
作者: lcywzg2008    时间: 2012-7-25 14:14
下来看看
作者: 黑驴蹄子    时间: 2012-7-25 16:38
我晕,这个不就是STC官网的资料嘛  拿到这来干嘛/ U. z/ _4 Y7 Y5 c: p5 l+ X
3 y2 A' G, V+ Z8 e) i- p( \
学单片机不看手册是瞎学,手册看懂了单片机也就会了
作者: 黑驴蹄子    时间: 2012-7-26 08:24
手册当然是好资料,不是说我是不是老手的问题,单片机老手编程照样需要对应的手册,毕竟单片机编程是基于硬件的
作者: zhuxiaoxing    时间: 2012-7-26 09:57
谢谢楼主.顺便请教个程序.我想用定时器中段实现两个数码管显示00--59;结果数码管一直显示00;不知道问题出在哪,3 S# d0 `- U* I  U" H
程序如下:
; G* k# a0 D# Q+ B& [" ?: P& a, A#include<reg52.h>, E2 [7 P# d) H1 s( }
#define uchar unsigned char         //定义uchar uint% _5 Q' [, n9 Q! a
#define uint unsigned int
" ]5 r$ m$ o* F1 U5 t  Q. Lsbit dula=P2^2;                         //定义数码管段显示3 Z$ ]3 X$ ^. v
sbit weila=P2^3;                //定义数码管位显示2 J4 D6 e4 Y; h' ^4 l% u/ N, W7 p- m+ B
uchar code table[]={                //定义数码管显示从0--9/ X" ?! E5 b. D1 |. C( m7 b
0x3f,0x06,0x5b,0 N% b: A9 r2 g) z3 D8 k+ K
0x4f,0x66,0x6d,
+ j2 v- @, D( d- t. |, o0x7d,0x07,0x7f,0x6f};( g1 q6 q1 u* _

( v+ l8 `5 ?3 T: V3 E% zvoid display(uchar,uchar);        //声明数码管显示函数
3 d# S* ~8 G0 e2 V2 j. Kvoid delay(uint);                //申明延时函数. Z9 S  z) @! X7 u4 _
uchar num,num1,shi,ge;
! N. D! P. x- y) P$ b& R  H2 }2 yvoid main()                        //主函数) f: j- A  C$ s, e  z. }
{
1 g8 H( h# z9 e) T  TMOD=0X01;                        //定时方式选择, h/ o3 T8 K: ~$ ?6 c5 W
  TH0=(65536-45872)/256;        //写定时初值
+ Y$ l* i3 p. \8 t2 O' j  TL0=(65536-45872)%256;, E" K8 E2 p) Y0 U* Z' Z
  EA=1;        //开启总中断
; \! {  g3 F: _; C! B- t3 H  ET0=1;        //开定时器0中断
6 C/ O6 `) u- k1 e9 z' x3 D4 j' G  TR0=1;        //启动定时器0
( D! Y' B2 L) J+ ^) x  while(1)+ ]% p' x& F% \) ?6 K
  {
6 |% q( I6 a0 M) f& K5 \1 O    display(shi,ge);                //数码管显示函数
; E4 k  v9 }/ ^  }
4 L5 x& z' A! [% ~* K}8 K, A% x; w$ T; ~& @: l' u( [
- z+ _% ^( }3 t7 U" B0 n
void display(uchar shi,uchar ge)        //显示函数
, ~9 D: [9 K5 c6 B. Z{
  W# Y" B! M+ ^) E) z. p' C   dula=1;                        //打开段选
6 k- G4 X9 k3 \( f   P0=table[shi];
  s- g9 N: T% o6 ]- \, T' ^$ h/ p   dula=0;- ~" V  b' _& ]! d
   P0=0xff;                        //重置P0 防止数码管乱码
* d0 I' Q8 w/ s( N5 Y4 r' s5 Z   weila=1;1 P1 S7 }: S9 I& F+ H! ~
   P0=0xfe;
1 I2 u( V% V7 A# A/ @   weila=0;
+ a& e4 P8 {! B. b: P/ X, |   delay(5);
  i6 N4 G7 Z4 H/ k5 U  2 S% I- \! Y! G9 ]# F* ^
   dula=1;/ i6 A8 S4 B" m/ ]8 ^: Y1 r
   P0=table[ge];" R, a$ s- H& Z+ Y+ ^
   dula=0;8 i4 s7 X) H9 N. R/ p3 N) e6 ?
   P0=0xff;
6 ?5 W9 _: K4 I$ v& w3 K   weila=1;
: C* o0 ^& }! n$ O9 Q   P0=0xfd;
/ r! c* ^& v1 ?( A   weila=0;6 V1 d; c" W- e* Y" L/ b& B' K: m
   delay(5);
5 a8 r2 s) P& B+ W4 Y  s  n  u: i* g' q}! B: C& |: S+ H( V$ N
& w" V% }# J% W2 h+ m6 u5 C
void delay(uint xms)    //延时函数 延时xms ms
2 d1 e3 E! R& z1 F( J{6 f  \* ?6 o1 _) W1 `
   uint i,j;0 V* S0 Z$ l+ y
   for(i=xms;i>0;i--)
  H7 j# X9 D8 U1 Z    for(j=110;j>0;j--);: s' T- @9 E! \1 |5 E% U
}  J& C6 b1 q3 M& A. r0 J0 U

" s" v, c9 r4 n6 e2 z2 Bvoid T0_Time() interrupt 3   //定时器0中断 定时方式1
; m; S: O# w) j2 v" c% u{8 ]1 V' V, ^/ f5 r9 L) _  }
TH0=(65536-45872)/256;
) _* o6 N" f$ y" b: t; j/ T. V+ k( d TL0=(65536-45872)%256;" B: a5 p7 n2 D; d+ g
num1++;
  T3 J  L/ E, h% O* p if(num1==20)      //检测到1s了没有
$ V2 V5 @' e3 ~+ E9 F+ s   {
' e# p* [7 e7 o* I* \    num1=0;
$ ]1 H% C. N; r+ X. z: R) [    num++;( s: n0 B" F) C% _4 S
    if(num==60)   //实现两个数码管从00--590 i4 V/ h1 f8 P0 r. m5 r3 I
    num=0;
' W) ~0 Z, \8 A, U1 g5 y! ?    shi=num/10;
4 F1 n- b6 P. W$ v    ge=num%10;# X; @+ c; Q& S
    }
2 q9 h" T9 d: {9 F7 H' s}
作者: zhuxiaoxing    时间: 2012-7-26 09:59
黑驴蹄子 发表于 2012-7-26 08:24 1 E: `4 E1 t' k7 {2 t1 \; e: a' K
手册当然是好资料,不是说我是不是老手的问题,单片机老手编程照样需要对应的手册,毕竟单片机编程是基于硬 ...
% r7 F' u; W9 m( d
呵呵  有道理  有空来帮我看看下面那个问题啊
作者: tony_wuy    时间: 2012-7-26 15:54
说实在的,如果工作中用STC的,还是要慎重,谁用过谁知道,学习之用还行!
作者: ArthurGXH    时间: 2012-7-26 20:59
本帖最后由 ArthurGXH 于 2012-7-26 21:50 编辑
9 a* }2 m  I/ P, U' t
tony_wuy 发表于 2012-7-26 15:54 1 E% M: u2 s% f4 H$ J
说实在的,如果工作中用STC的,还是要慎重,谁用过谁知道,学习之用还行!

! }/ m$ K4 h/ S; f+ x/ Q; S6 y' |
. e9 P* }; H7 I  w* d, P) y很多人对我说最好别用STC的芯片,包括PIC的技术支持、实习的研究生等,但是我做了一个产品,什么问题也没有。想当年,用台湾民用级的芯片也一样做出稳定的产品,何况是STC的工业级芯片。所以只要有人对我说他用STC芯片出了什么问题,我都会说是你的设计有问题。 不过现在我很少用51,改用功能更强的PIC、ARM。
作者: ArthurGXH    时间: 2012-7-26 21:44
本帖最后由 ArthurGXH 于 2012-7-26 21:51 编辑
5 o% w- Y9 b5 ^8 D: [; C: b) Q
zhuxiaoxing 发表于 2012-7-26 09:57
" m' F* e# F0 C, R) f  R谢谢楼主.顺便请教个程序.我想用定时器中段实现两个数码管显示00--59;结果数码管一直显示00;不知道问题出在 ...

5 x! [+ y4 N1 e3 L  w! F  \5 H- E$ t: z2 o2 L
以后请附上原理图,否则别人也只能猜测
* o$ S" S/ q' G1 f: G& m$ X调试方法:   
2 H- J& L) m" b    1.  猜测display函数有问题,dula、weila是公共端,P0是a~g段对吗?  P0=table[shi]; P0=table[ge]; 应该是要显示的数据,显示了并没有延时,而是再一次又一次的赋值,再延时,这样查表显示的内容根本看不到,而是看到后面的定值(当然有锁存器的例外)。
) b% L) c6 b' u  g+ E" h, t; b    2. 验证一下中断是否正常工作。若没有仿真器,可以在程序的每秒处亮灭LED 或通过串口发送一些数据到电脑。
2 D, {! R$ @+ r! G5 h/ a    3. 充分发挥想像力,一点一点的缩小范围。
. W  o. [. ]) p. H8 [. ^/ H, E
作者: zhuxiaoxing    时间: 2012-7-27 09:55
ArthurGXH 发表于 2012-7-26 21:44
5 I4 _# d( X" F3 s% Z0 b: c( d以后请附上原理图,否则别人也只能猜测
7 s+ S2 E3 ?2 V/ ]- t9 U调试方法:    8 b: F0 l6 z- m
    1.  猜测display函数有问题,dula、weila ...

  u# w) T' k* g: Y5 C( L) R) |谢谢  已经找到答案了  定时器0中断写错了  应该是interrupt 1
作者: ArthurGXH    时间: 2012-7-27 22:29
zhuxiaoxing 发表于 2012-7-27 09:55 4 h9 d* B  g0 O$ s/ E6 Z
谢谢  已经找到答案了  定时器0中断写错了  应该是interrupt 1

. i/ W$ h5 `6 R不用客气,找到问题就好。
作者: 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电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2