/*************************************************
实验名称:pcon,进入休眠模式实验
实验目的:用定时器显示数码管的前两位,当计数到5时使单片机进入休眠模式,同时关闭计时器,当单片机相应外部中断后,从休眠模式返回,同时启动计时器,数码管继续计数。
实验备注:当PCON=0x01时进入休闲模式,定时器不会停止,从而引发中断,所以要设置ET0关闭中断,当PCON=0x02时进入掉电模式,定时器停止,不会引起中断的发生,数码管停止计数。
*************************************************/
#include
#define uchar unsigned char
#define uint unsigned int
sbit duan = P2^6;
sbit wei = P2^7;
uchar shi,ge,num,num1;
uchar code duan_table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code wei_table[]=
{0xfe,0xfd,0xfb,
0xf7,0xef,0xdf};
void delay_1ms(uchar);
void display(uchar, uchar);
void main()
{
shi = 0;
ge = 0;
num = 0;
TH0 = (65536-46080)/256;
TL0 = (65536-46080)%256;
TMOD = 0x01;
EA = 1;
ET0 = 1;
EX0 = 1;
EX1 = 1;
TR0 = 1;
while(1)
{
if(num == 20)
{
num = 0;
num1++;
if(num1 == 6)
{
// ET0 = 0;
PCON = 0x02;
}
shi = num1/10;
ge = num1%10;
}
display(shi,ge);
}
}
void delay_1ms(uchar x)
{
uchar i, j;
for(i =0; i < x; i++)
for(j = 0; j < 110; j++);
}
void display(uchar shi, uchar ge)
{
duan = 1;
P0 = duan_table[shi];
duan = 0;
P0 = 0xff;
wei = 1;
P0 = wei_table[0];
wei = 0;
delay_1ms(1);
duan = 1;
P0 = duan_table[ge];
duan = 0;
P0 =0xff;
wei = 1;
P0 = wei_table[1];
wei = 0;
delay_1ms(1);
}
void Timer0() interrupt 1
{
TH0 = (65536-46080)/256;
TL0 = (65536-46080)%256;
num++;
}
void Ex_int0() interrupt 0
{
PCON = 0;
// ET0 = 1;
}
void Ex_int1() interrupt 2
{
PCON = 0;
// ET0 = 1;
}
关键字:PCON 寄存器 实验报告
引用地址:
PCON寄存器实验报告
推荐阅读最新更新时间:2024-11-11 10:51
STM8 时钟分频寄存器
STM8时钟分频寄存器(CLK_CKDIVR) 地址偏移值:0x06 复位值:0x18 位7:5 保留。始终为0。 位4:3 HSIDIV :高速内部时钟预分频器 由软件写入,用于指定HSI分频因子。 00:fHSI=fHSI RC输出 01:fHSI=fHSI RC输出/2 10:fHSI=fHSI RC输出/4 11:fHSI=fHSI RC输出/8 位2:0 CPUDIV :CPU时钟预分频器 由软件写入,用于指定CPU时钟预分频因子。 000:fCPU=fMASTER 001:fCPU=fMASTER/2 010:fCPU=fMASTER/4 011:fCPU=fMASTER/8 100:fCPU=fMASTER
[单片机]
S3C2440 按键中断
中断也是一种异常,但中断较为复杂一点,除了一般异常的处理流程 保护现场 处理 (handle_irq_c ) 判断中断源 跳到中断处理函数 (key_action) 清除中断 恢复现场 当然还有寄存器设置函数 key_enit_init 更为甚者,我们可以来参考手册上的流程图 对于我们的按键中断来讲,都是without sub-register。 寄存器 使用什么外设,其实都是和寄存器打交道。那么,这次又和哪些寄存器打交道呢。 总中断寄存器 Determine which interrupt source is masked. The masked interrupt source will no
[单片机]
iTOP-4412嵌入式开发板ioremap控制GPIO寄存器
GPIO 的寄存器通过 ioremap函数转换之后,可以通过直接控制虚拟地址来控制物理地址(寄存器的实际地址),这样就实现 GPIO的读和写以及其它任意功能。 需要的基础知识 虚拟地址和物理地址 内存管理单元概念 linux 驱动模块的加载 主要内容 GPIO 的寄存器文档详细介绍和说明 函数 ioremap的用法 使用 ioremap实现对 GPIO的控制 硬件 以 LED2(靠近蜂鸣器的 LED)为例,介绍原理图以及Datasheet 中对应的寄存器。 原理图 打开底板原理图 pdf文档,如下图所示,选取 LED2,网络标号是 KP_COL0。 通过查找网络标号 KP_COL0,发现 KP_COL0接到连接器上,如下图所示
[单片机]
51单片机的定时器中断(寄存器)
中断是为使单片机具有对外部或内部随机发生的事件进行处理而设置的。51单片机有5种中断源,即有5种对应的情况发生时会使单片机去处理中断程序(中断函数)。 此篇主要整理定时器中断笔记。采用定时器中断会涉及中断寄存器,定时器/计数器相关寄存器(TCON,TMOD),中断函数等知识点。 其中,中断寄存器,定时器/计数器相关寄存器本身或者相关位用来做初始化,中断函数的内容主要是体现发生中断后所需要的操作(在中断函数内写代码)。 1.中断允许寄存器IE 图1.中断寄存器IE 中断寄存器用来设定各个中断源的打开和关闭,IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是A8H~AFH,该寄存器运行位寻址,即可对该
[单片机]
linux - 驱动中如何访问CPU中的寄存器?
正在移植2440, 偶然看2.6.32代码的时候, 发现smdk2440的mach-smdk2440.c中有如下结构体定义: static struct map_desc smdk2440_iodesc __initdata = { /* ISA IO Space map (memory space selected by A24) */ { .virtual = (u32)S3C24XX_VA_ISA_WORD, .pfn = __phys_to_pfn(S3C2410_CS2), .length = 0x10000, .type = MT_DEVICE, }, { .virtual = (u32)S3C24
[单片机]
ARMv8-A架构基础之系统寄存器
在AArch64中,系统配置是通过使用MSR和MRS指令来控制的(通过MSR和MRS指令访问系统寄存器)。 这与ARMv7-A不同,在ARMv7-A中通常通过协处理器15(CP15)操作系统寄存器。 寄存器的名称通常暗示着它能被访问的最低的异常级别。 例如: 可以从EL1,EL2和EL3访问TTBR0_EL1。 可以从EL2和EL3访问TTBR0_EL2。 具有后缀_ELn的寄存器在一些或所有级别上都有单独的存储副本,EL0除外。 只有很少的系统寄存器可以从EL0访问,比如缓存类型寄存器(CTR_EL0)就可以。 访问系统寄存器的代码采用以下形式: MRS X0,TTBR0_EL1 //将TTBR0_EL1移入X0
[单片机]
STM32L--GPIO
1. 每个GPIO均有以下寄存器: 4个32位配置寄存器:GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR和GPIOx_PUPDR GPIOx_MODER :配置IO端口方向为输入/输出/AF/模拟 GPIOx_OTYPER :选择输出类型:推挽/开漏 GPIOx_OSPEEDR :选择IO速度(与IO端口方向无关) GPIOx_PUPDR :选择上拉/下拉电阻(与IO端口方向无关) 2个32位数据寄存器:GPIOx_IDR、GPIOx_ODR 1个32位置位/复位寄存器:GPIOx_BSRR(使用该寄存器读写寄存器可以避免在读写期间被IRQ中断,该读写操作属于一个原子操作) 该寄存器
[单片机]
ARM中断寄存器
1.中断分两大类:内部中断和外部中断。 2.外部中断。24个外部中断占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用这些脚做中断输入,则必须配置引脚为中断,并且不要上拉。具体参考datesheet数据手册。 寄存器:EXTINT0-EXTINT2:三个寄存器设定EINT0-EINT23的触发方式。 EINTFLT0-EINTFLT3:控制滤波时钟和滤波宽度。 EINTPEND:这个是中断挂起寄存器,清除时要写1,后面还有几个是写1清除。当一个外部中断(EINT4-EINT23)发生后,那么相应的位会被置1。为什么没有EINT0-EINT3,呵
[单片机]