Ⅰ 急求:单片机实验
:
ORG 0030H
MOV 30H, #34H
MOV 31H, #56H
MOV 32H, #23H
MOV 33H, #90H
MOV 34H, #32H
MOV 35H, #68H
MOV 36H, #09H
MOV 37H, #75H
CALL SORT
SJMP $
;-----------------------------------------------------
SORT: ;最简短、高效的排序程序.
MOV B, #7 ;第一轮排序时,比较7次.
S1: MOV R0, #30H ;数据区的起始地址.
MOV R7, B
CLR PSW.5 ;清除"交换"标志位.
S2: MOV A, @R0 ;取前一个数.
INC R0
CLR C
SUBB A, @R0 ;减后一个数,前<后时,Cy=1
S3: JC S4 ;有借位时,不用交换,转移.
MOV A, @R0 ;取后一个数,准备交换.
DEC R0
XCH A, @R0 ;交换到前一个.
INC R0
XCH A, @R0 ;交换到后一个.
SETB PSW.5 ;设定"交换"标志位.
S4: DJNZ R7, S2 ;继续本轮比较.
JNB PSW.5, ENDS ;如本轮没有进行过交换,可提前结束.
DJNZ B, S1 ;下一轮,比较次数少一次.
ENDS:
RET
;-----------------------------------------------------
END
Ⅱ 单片机原理与实验
定时器的时钟频率为12MHz/12=1MHz,则定时器计数器计1个数为1us,所以2ms为2000,因为计数器是向上计数模式,所以65536-2000=63536=0xF830
void Timer0_Init(void)
{
TMOD|=0x01; //16位定时器模式
ET0=1; //定时器0中断允许
TH0=0xF8; //定时2ms 2000-2ms
TL0=0x30;
TR0=1; //开始计时
}
void Timer0_Interrupt(void) interrupt 0
{
TH0=0xF8; //重装载
TL0=0x30;
if(P1^0 == 1) P1^0 = 0;
else P1^0 = 1;
}
Ⅲ 学单片机都可以做哪些有趣的实验
我和单片机打了5年交道了,从大2开始。 我的心得:单片机不是用来学的,是用来玩的。初学者建议您用AVR,51就别学了,不是因为它老,是因为AVR涵盖的知识多,学会了AVR别的你就全明白了,不建议你以后用汇编编程,但是建议你看一下汇编程序,了解单片机内部工作原理。 学单片机之前先把C语言弄透,以后会少走好多弯路。 至于实验初学者可以先学流水灯、矩阵按键、数码管扫描,完后玩一点更稍级的18B20、DS1302、LED屏幕、液晶等,这些都会了你就算‘明白’单片机了,然后往更高层次发展。 单片机是工具,它需要你具备一定的模拟、数字基础知识,学这些都不难,最难的是坚持学下去。手机上、MP3上的控制芯片现在用的是ARM,这算是一种更高级的单片机,这就是单片机和电子的关系。单片机是一种潮流,推动电子往更高层次发展的潮流。 我们老师告诉我一句话:切忌做浮躁的单片机工程师,与其整日把时髦的技术挂在嘴边,不如把最基本的东西牢牢记在心里,学习单片机并不难,难的事坚持不懈的学习下去。 我想这就是学习单片机的诀窍。 然后的问题是程序下载器,这个有卖的,ISP下载线就可以,大约三四十块钱,也可以自己做,ouravr.com上也能找到电路图,至于编译器建议你用WINAVR,在这个网站上也有下载链接,这些都OK了之后下载一份Mega16的芯片说明书,然后买一本马潮老师写的单片机原理,在这个网上可以订得到,我是在书店买的,你要是有什么不会的话,在网站论坛上留言他会给你解答,这个网站对我的帮助很大,是一个纯技术的网站,所有源码公开,我的AVR就是在这里学会的。呵呵,看起来像是做广告,不过这个网站的学习环境远远比混乱的现实世界好~ 记住:最难能可贵的就是坚持,坚持下去!
Ⅳ 单片机实验
1、
MOV R0,#20H
MOVX A,@R0
MOV 20H,A
2、
MOV DPTR,#2000H
MOVX A,@DPTR
MOV 20H,A
3、
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV 20H,A
4、
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV B,A
MUL AB
MOV R7,A
MOV R6,B;(溢出部分送R6)
5、高八位?低八位?什么意思?
地址高八位DPH,地址第八位DPL
MOV DPH,#20H
MOV DPL,#00H
Ⅳ 单片机实验编程
1.
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV P1,#00H
LCALL DELAY
MOV P1,#0FFH
LCALL DELAY
SJMP MAIN
DELAY:
MOV R2,#200
DLY:
MOV R3,$250
DJNZ R3,$
DJNZ R2,DLY
RET
END
2.
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FEH
LOOP:
MOV P1,A
LCALL DELAY
SJMP LOOP
DELAY:
MOV R2,#200
DLY:
MOV R3,$250
DJNZ R3,$
DJNZ R2,DLY
RET
END
Ⅵ 单片机实验——数据传送实验
ORG 0000H
LJMP MAIN
ORG 0060H
MAIN:
MOV R0 ,#4800H
MOV R1 ,#5800H
LOOP:
MOVX A ,@R0
MOV R1 ,A
INC R0
INC R1
DJNZ #10H,LOOP
END
Ⅶ 单片机实验设计
;-------------------------------------
;下列程序,经过编译、仿真,符合要求:
;-------------------------------------
ORG 0000H
SJMP START
ORG 000BH
SJMP T0_INT
;-------------------------------------
START:
MOV TMOD, #01H
MOV TH0, #9EH
MOV TL0, #58H ;50ms@6MHz
SETB TR0
SETB ET0
SETB EA
MOV R2, #10
LOOP:
CLR PSW.5
CLR P1.1 ;输出0,这是一个周期的开始.
JNB PSW.5, $ ;等待500ms
CLR PSW.5
JNB PSW.5, $ ;再等待500ms
CLR PSW.5
MOV C, P3.3 ;如果P3.3为低,
CPL C
MOV P1.1, C ;就输出高,这就是50%占空比.
JNB PSW.5, $ ;继续等待500ms
CLR PSW.5
SETB P1.1 ;如果到这里才输出高,就是25%占空比.
JNB PSW.5, $ ;输出高500ms
SJMP LOOP
;-------------------------------------
T0_INT: ;50ms执行一次.
MOV TH0, #9EH ;重新赋初始值.
MOV TL0, #58H ;50ms@6MHz
DJNZ R2, T0_END ;不到10次,转到退出.
; ;下列指令都是每隔500ms执行一次.
MOV R2, #10 ;重新设置.
SETB PSW.5 ;每隔500ms,设置一次1
T0_END:
RETI
;-------------------------------------
END
;-------------------------------------
编译后的机器语言,仅仅用了74字节
Ⅷ 51单片机小灯实验
给你第一用汇编第二用C吧,另一半自己搞定。
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FEH
MOV R2,#8
LOOP:
MOV P0,A
LCALL DELAY
CLR C
RLC A
DJNZ R2,LOOP
SJMP $
DEALY:
MOV R3,#200
DELAY1:
MOV R4,#250
DJNZ R4,$
DJNZ R3,DELAY1
RET
END
#include<reg51.h>
#define uchar unsigned char
uchar num;
sbit LED=P1^0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num>=200)
{
num=0;
LED=~LED;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
LED=0;
while(1);
}
Ⅸ 51单片机应该做哪些实验
如果是刚开始学习的话,那就买一块开发板,比如笃行之家的,一般的开发板都会配套好多实验,你可以先学习基本的实验,如流水灯,数码管,点阵,lcd显示,红外,AD/DA,继电器,蜂鸣器等,学完了之后就可以拔高练习。