《世上只有妈妈好》51单片机汇编语言程序

发布者:丹青妙手最新更新时间:2015-10-10 来源: eefocus关键字:51单片机  汇编语言 手机看文章 扫描二维码
随时随地手机看文章
;《世上只有妈妈好》51单片机汇编语言程序

      ;2007-5-22    作者:徐学军
      ;注意有一个51单片机C语言程序与之对应
      ;此程序在硬件上调试通过
      ;本程序的单片机晶振采用11.0592MHZ
SPK BIT P1.7
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIMER0
MAIN:
MOV TMOD,#01H ;置CT0定时工作方式1
MOV IE,#82H    ;CPU开中断,CT0开中断
       MOV R5,#0
PLAY:  
       MOV A,R5  
       MOV DPTR,#TABLE1
       MOVC A,@A+DPTR
       MOV    R6,A
       INC R5
       MOV A,R5
       MOVC A,@A+DPTR
       MOV    R7,A
        INC R5
       MOV A,R5
       MOVC A,@A+DPTR
       JNZ PLAY1
       MOV R5,#0
       LJMP PLAY
PLAY1:
       MOV B,#3
       MUL AB
       MOV R2,A
       MOV B,#7
       MOV A,R7
       MUL AB
       ADD A,R6
       DEC A
       MOV R6,A
       MOV DPTR,#FREQH
       MOVC A,@A+DPTR
       MOV R4,A
       MOV DPTR,#FREQL
       MOV A,R6
       MOVC A,@A+DPTR
       MOV R3,A
       LCALL SONG    ;调用音符播放程序
INC R5
SJMP PLAY    ;转入调用下一个音符OV R3,A
  
SONG:
MOV TH0,R4
MOV TL0,R3
SETB TR0    ;启动CT0(开始唱某一音符)
DELAY:
MOV R1,#85H    ;节拍延时(即某一音符唱多长时间)
DEL1:
MOV R0,#0FFH
DEL0:
NOP
NOP
NOP
DJNZ R0,DEL0
DJNZ R1,DEL1
DJNZ R2,DELAY
CLR TR0    ;禁止CT0(某一音符唱完后停止)
RET
TIMER0:      ;定时中断程序(用于决定某一音符唱多高)
CPL SPK
MOV TH0,R4
MOV TL0,R3
RETI

     TABLE1:
      DB    6,2,3,    5,2,1,    3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1
      DB    6,2,4,    3,2,2,    5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1
      DB    6,1,1,    5,2,1,    3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2
      DB    5,2,1,    6,2,1,    3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1
      DB    2,2,1,    1,2,1,    6,1,1, 1,2,1, 5,1,6, 0,0,0
    ; 音阶频率表
FREQH:
          DB       0F2H,0F3H,0F5H,0F5H,0F6H,0F7H,0F8H
          DB       0F9H,0F9H,0FAH,0FAH,0FBH,0FBH,0FCH, 0FCH ;1,2,3,4,5,6,7,8,i
          DB            0FCH,0FDH,0FDH,0FDH,0FDH,0FEH
          DB       0FEH,0FEH,0FEH,0FEH,0FEH,0FEH,0FFH
FREQL:
          DB       42H, 0C1H, 17H, 0B6H,0D0H,0D1H,0B6H
          DB       21H, 0E1H, 8CH, 0D8H,68H, 0E9H, 5BH,    8FH ;1,2,3,4,5,6,7,8,i
          DB            0EEH,44H,     6BH,0B4H,0F4H,2DH
          DB       47H, 77H,0A2H,0B6H,0DAH,0FAH,16H
          END

关键字:51单片机  汇编语言 引用地址:《世上只有妈妈好》51单片机汇编语言程序

上一篇:基于51单片机的音乐播放程序
下一篇:《世上只有妈妈好》51单片机C语言程序

推荐阅读最新更新时间:2024-03-16 14:34

学习51单片机有感
这里有专门的一个 定义特殊功能寄存器的位变量。   bit和sbit都是C51扩展的变量类型。 典型应用是:sbit P0_0=P0^0;//即定义P0_0为P0口的第1位,以便进行位操作。 利用异或操作取位,进行,,,,,, 在设置定时器的时候发现下列的代码 THO = (65536 - 5000)/256;//赋值高8位 TLO = (65536 - 5000)%256;//赋值低8位 你说这与直接将65536 - 5000 赋予寄存器 有什么区别,这样有什么好处?怎么有种脱了裤子放屁的感觉,----后来了解到原来是两个8位寄存器合成的,怪不得要分别赋值。 //产生 3:1的脉冲 灯亮1s 熄灭
[单片机]
51单片机学习———3--蜂鸣器
原理 蜂鸣器介绍 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。 接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。 多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。 自激蜂鸣器是直流电压驱动的,不需要利用交流信号进行驱动,只需对驱动口输出驱动电平并通过放大电路放大驱动电流就能使蜂鸣器发出声音,非常简单。 蜂鸣器控制 改变单片机引脚输出
[单片机]
<font color='red'>51单片机</font>学习———3--蜂鸣器
51单片机片外扩展RAM
一.概述 普通51单片机可以片外扩展ROM和RAM各64K字节的空间,在实际应用中很少扩展外部ROM,一般都是扩展RAM,因为普通51单片机的内部RAM实在太少,只有128-256字节,处理数据量较大时往往不够用。而片外扩展RAM需要占用P0口、P2口和P3.6、P3.7,消耗了18个IO口,导致IO口又不够用。为了解决以上矛盾,大容量的51单片机(增强型51单片机)应运而生,这种单片机一般内置1K-16K的RAM和16K-64K的ROM,价格也相对昂贵。在某些情况下,用普通51单片机通过片外扩展RAM要比直接使用增强型51单片机更能节约成本。所以,学习51单片机片外扩展RAM是很有必要的。 二.电路设计 在WSF-51DB
[单片机]
<font color='red'>51单片机</font>片外扩展RAM
51单片机在设计中的的时钟及复位
单片机 的时钟信号用来提供单片机片内各种微操作的时间基准,复位操作则使单片机的片内 电路 初始化,使单片机从一种确定的初态开始运行。 时钟电路: 8031单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。 在引脚XTAL1和XTAL2外接晶体 振荡器 (简称 晶振 )或陶瓷谐振器,就构成了内部振荡方式。由于单片机内部有一个高增益 反相 放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。内部振荡方式的外部电路如下图所示。 图中, 电容 器Col,C02起稳定振荡 频率 、快速起振的作用,其 电容 值一般在5-30pF。晶振频率的典型值为12MH2,采用6M Hz 的情况也比较多。内部振荡方式所得的时钟情号
[单片机]
<font color='red'>51单片机</font>在设计中的的时钟及复位
51单片机~DS18B20温度传感器
(一)简介说明: (二)接线: 1. 内部结构: 正温度前五位是0. 负温度前五位是1. 由LS,MS组成的四位十六进制数,和16位二进制数。(先MS后LS) 结合上下图直到温度计算:1乘2 ^ 6 + 0乘2 ^ 5 +1乘2^ 4 +0乘2^ 3 +……2^0 ==85 (二)使用流程,按照时序图编写程序(判断应用): 粗黑线是总线控制的电平 灰线表示DS18B20控制的; 电阻上拉是由于上图接线有一个上拉电阻 读时重复七次直到读完为止 测试温度代码: temp.h #ifndef __TEMP_H_ #define __TEMP_H_ #include reg52.h
[单片机]
<font color='red'>51单片机</font>~DS18B20温度传感器
有关51单片机读端口、读引脚的问题
80C51单片机有P0-P3四个P口,以P0为例说明: 要搞清这个问题,就要明白p0口的内部结构。P0口是由锁存器经两个驱动场效应管和外部引脚相连的。 读引脚的意思就是直接读P0外部引脚的电位,而读端口(锁存器)读的是内部与数据总线链接的锁存器的电位。 两者不同。一般来说,读取P0的数据,都是读引脚,目的是获取与P0相连的外部电路的状态。而读端口是在执行下述语句时由CPU自行完成的: inc P0;给p0加1 执行这个语句时 ,采用“读-改-写”的过程,先读取p0的端口数据,再加1,然后送到p0锁存器里。注意这个端口数据跟p0的引脚状态不一样,比如你事先给p0写进69H,p0里数据就是69H,而引脚上的状态因为你没有执行MOV A
[单片机]
51单片机定时器中断基础
一、中断概念 中断是为使单片机具有对外部或者内部随机发生的事件实时处理而设置的。 把自己想象成单片机的CPU,你正在洗衣服,但是突然快递小哥给你打电话让你去拿快递,于是你停下洗衣服去拿快递了。快递小哥的电话就是中断信号,告诉你有其他的事情需要先去做,然后你去拿快递就相当于中断之后要去处理的事情。 51单片机有五个中断源 INT0——外部中断0 INT1——外部中断1 T0——定时器/计数器0中断 T1——定时器/计数器1中断 TI/RI——串行口中断 二、使用中断的过程(下面以定时器0、工作方式1为例) 定时器0选择工作方式1 D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T M1 M0 G
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved