Microchip软件/Atmega32 /C语言
通过以下实验代码反推实验目的和实验结论 /* - GccApplication5.c
- Определение состояния входа УСО
- Created: 21.02.2021 14:51:33
- Author : zhanjinniuza
- /
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util\delay.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h> int main(void)
{
DDRB=0b10000000;//порт: 7 разрядов на ввод информации, 1 на вывод.
DDRC=0xFF;//порт на вывод для оценки загрузки процессора
uint8_t cps=0, pps=0;// переменные для работы алгоритма антидребезга uint8_t pState=0;// для хранения значения порта unsigned long delayCicle; //переменная для отсчета циклов задержки while (1) { PORTC=0x00; // для оценки загрузки процессора /* примерное время программной задержки на исполнении пустого цикла * for (delayCicle=0; delayCicle<100; delayCicle++) ; * Количество_циклов_процессора = 34 * delayCicle + 29 * при частоте генератора 8 МГц за 1 мкс выполняется 8 циклов процессора * время_задержки = Количество_циклов_процессора / 8 */ for (delayCicle=0; delayCicle<33; delayCicle++) ; PORTC=0xFF; // для оценки загрузки процессора cps=PINB & 0b00001000;//обрабатываем только 1 бит порта (по заданию) if (cps^pps) { //сюда попадаем, если значение на входе изменилось pps=cps; continue; //переход на начало цикла } // сюда попадаем только если значение на входе стабильно if (pState!=cps) pState=cps;// обновляем значение теущего состояния порта, если изменилось if (pState) // выводим результат работы алгоритма в порт B чтобы сохранить в логфайл PORTB |= 0b10000000; // алгоритм определил включенное состояние порта else PORTB &= 0b01111111;// алгоритм определил вЫключенное состояние порта }
|