请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP432P401R 大家好,我正在使用MSP432P401R Launchpad (红色板)。 我正尝试打开引脚1.0 ,2.0 ,2.1 ,2.2 ,基本上是LED1和LED2 (RGB)上的LED指示灯。 我遇到了一些问题,希望有人能帮助我理解某些概念。
问题1)我将P1DIR初始化为#237 (引脚1.1 和引脚1.4 是输入引脚,其他所有引脚均为输出),P1REN和P1OUT初始化为#0x12 (激活两个按钮引脚1.1 和引脚1.4 上的上拉电阻器)。 但当我尝试从P1IN读取时,我不断收到0x0.0012万。 为什么在未按下按钮时输入针脚读数较高。 在我下面的代码中,我正在执行独家或修复,但这对我来说似乎不正确。
谢谢你
.cdecls C,list,"msp432p401r.h" .text .global main : BL init_port_1 ;Branch到函数init_port_1 BL init_port_2 ;Branch到函数init_port_2 mov r3,#0x4c02 ;移动地址的下16位(端口1 movt r3,#0x4000 ;移动地址的上16位) 输出 mov r1,#0x4c00 ;移动地址的下16位(端口1 movt r1,#0x4000 ;移动地址 输入的上16位) mov r2,#0x4c03 ;移动地址的下16位(端口2 movt r2,#0x4000 ;移动地址 输出的上16位) b loop ; BRANCH至LOOP函数 ;此函数将初始化端口1 init_port_1: MOV R0,#0x4c04 ;移动地址的下16位(端口1 movt R0,#0x4000 ;移动地址 方向的上16位) mov r1,#0x4c06 ;移动地址的下16位(端口1 movt. R1,#0x4000 ;移动地址的上16位 r) mov r2,#0x4c02 ;移动地址的下16位 (端口1 movt. r2,#0x4000 ;移动地址 输出的上16位) mov r5,#0x4c0A ;移动地址的下16位(端口1 movt. R5,#0x4000 ;移动地址的上16位 sel0) mov R6,#0x4c0C ;移动地址的下16位(端口1 movt R6,#0x4000 ;移动地址的上16位 sel0) mov r3,#237 ;将237位移动到寄存器3以供以后使用 mov R4,#18 ;将18位移到寄存器4中,以便以后使用 strb R3,[R0] ;将1位存储到端口1方向地址 strb R4,[R1] ;将18位存储到端口1 REN地址(引脚1.1 和1.4) strb中 R4,[R2] ;将18位存储到端口1输出地址以启用上拉 BX LR ;从调用此函数的位置返回 ;此函数将初始化端口2 init_port_2: MOV R1,#0x4c05 ;移动地址的下16位(端口2 movt R1,#0x4000 ;移动地址的上16位) mov r2,#0x4c03 ;移动地址的下16位(端口2 movt. r2,#0x4000 ;移动地址 输出的上16位) mov R0,#0x07 ;将七位移动到寄存器2 strb中 R0,[R1] ;将7位存储到端口2方向地址针脚2.0 ,2.1 ,2.2 mov r0,#0 ;将0位移至寄存器0 strb R0,[R2] ;将0位存储到所有端口2引脚中,所有引脚均为低 BX LR ; ;以下功能将持续搜索按键 回路: ldrb R0,[R1] ;将寄存器1中的值加载到寄存器0中,这是从端口1 EOR R0 #18读取 的值;这是为了修复输入引脚不能正常工作 的CMP R0,#2 ;如果寄存器0等于#2,则正在按下引脚1.1 ,即左按钮 ,即 eq bleq 按钮1 ;如果等于 CMP,则分支到按钮1功能 R0,#16 ;如果寄存器0等于#2,则正在按下针1.4 ,即右键 ,它 相当于 bleq 按钮2 ;如果等于 CMP,则分支到按钮2功能 r0,#18 ;如果寄存器0等于#18,则插针4和插针1被按下,即两个按钮 都 是eq both _buttons; 如果b loop相等,分支到both _buttons功能 ;分支到循环功能,这是一个无限循环 ; 以下功能检查将打开红色LED和绿色一 个按钮1: MOV R7,#1 MOV R8,#2 直发 R7,[R3] ;将1位存储到寄存器3 strb中的端口1输出地址 R8,[R2] ;将1位存储到端口2 LED2 (RGB) BX LR 中;从调用此函数的位置返回 ;以下功能将打开绿色LED 按钮2: MOV R7,#1 MOV R8,#4 strb R7,[R3] strb. R8,[R2] ;将2位存储到寄存器0 BX LR中的端口2方向地址 中;从调用此函数的位置返回 ;以下功能将打开蓝色LED Both按钮: MOV 7号,7号 ; 移动 R8,#1 ; strb. R8, [R3] ; strb. R7,[R2] ;将4位存储到寄存器0 BX LR中的端口2方向地址 ;从调用此函数的位置返回