Главная Микроконтроллеры [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [ 81 ] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] На рис. 6.25 представлены окна, использующиеся при отладке программы SRAM.asm. Размеры и размещение окон позволяют одновременно наблюдать происходящие в них изменения. 017D Ol. 09 Oe 07 0« 05 D4 03 OZ 00 00 00 00 00 00 Olto 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 0190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00* OUO 00 00 00 00 00 00 00 00 00 00 -30 00 00 00 ooooZJ ,, .. ".Xr------ - - f »n 1 > p«rU7Tp СЛН-%А . --------------- .....,------3 ; я1«=СшЪг1111м i-«FKcii: Z F«rMCi>p Z и «««.чаф ; » ::н хк(7>у№ггс« bi-3h((C:i70j, то *СТк, , в г или в ZH;ZL1 ф[->тует::я двхба&тН)* ф t.ArSlBB 1 B.BTpyxMVfc в < , 31 - ОПВр*1в4В CUDICII coMj-tiottro 1-*г>1е*>* ; fcipBC rcT-9p->fi - в рвгмгтр-» 2. ,- Б п*1.»<-м ivaun* лАыммв дмвсутсх во ,- в «.с-р*.». »«гй« - п*. ижутст »017., If ».д • ВОР ВОР : П7СВМ frMMUB ; F«iwiTpa SRSC - t<SC cnc , гсмАЦХВ KbF вв ; с*су*ств11м ни влквния t-м Z BJUt PISII 2, работа Г5>чгрв»в1и Йудет м к;-ли вт Рис. 6.25. Вид окна Все до сих пор выполнявшиеся команды занимали по одному циклу микроконтроллера, мы выполнили 6 команд, что соответствует состоянию счетчика циклов (Cycle counter 00000006) в окне Processor. Нажмите F11. В ячейку памяти 0x0170 записалось число $0А (окно Memory). Состояние счетчика циклов увеличилось лишь на два (окно Processor). Для команды ST такое увеличение соответствует обращению лишь к внутренней памяти микроконтроллера. В нашем случае обращения к внешней памяти количество циклов должно было увеличиться на четыре, так как один дополнительный цикл требуется для обращения к внешней памяти и еще один цикл, так как мы задали режим работы с дополнительным циклом ожидания установкой бита SRW в регистре MCUCR. При обращении к внешней памяти количество циклов, подсчитанное симулятором, оказывается ошибочным. Нажмите F11 четыре раза, наблюдая за состоянием счетчика циклов. При выполнении условия команды BRNE (если бит Z в окне Processor I Flags сброшен) состояние счетчика циклов увеличивается на два. Обратите на это внимание, так как в описании для этой команды указано число циклов 1/2 (один или два). Один цикл потребуется при невыполнении условия команды (смотрите ниже). Теперь мы перешли ко второму циклу записи массива в память. Ничего нового в каждом отдельном цикле мы не увидим, поэтому воспользуемся сочетанием клавиш Ctrl+FlO (нажать клавишу Ctrl, не отпуская ее, нажать F10). По каждому нажатию Ctrl+FlO контролируйте переменную cnt в окне Watches. Число нажатий - пока переменная cnt не станет равной единице. При каждом нажатии можно также следить за записью данных в память (окно Memory), адресом, по которому производится запись (окно Processor Z-register и переменные ZH, ZL в окне Watches). Если в окне Processor Stop watch нажать кнопку Clear, то после следующего нажатия Ctrl+FlO правее кнопки Clear появится информация о длительности одного цикла. Теперь, когда мы снова остановились на команде ST, а cnt=l, воспользуемся клавишей F11. Дважды нажать F11. Выполнение команды DEC привело к нулевому результату в регистре cnt, поэтому бит Z установлен (окно Processor I Flags). Дважды нажать F11. Состояние бита Z не изменилось, так как команды NOP не влияют на него. Нажать F11. Так как бит Z установлен, выполнение команды BRNE не приводит к переходу на метку NEXT, выполняется переход к следующей команде. Состояние счетчика циклов при невыполнении условия команды BRNE (когда бит Z в окне Processor Flags установлен) увеличивается на единицу. Замечание. Команду BRNE лучше ставить непосредственно за командой, определяющей, как работать команде BRNE (в нашем случае правильнее было бы разместить перед ней команду DEC cnt). Отладка блока считывания данных из памяти не отличается от отладки блока записи в память. Вы можете самостоятельно отладить эту часть программы. Замечу лишь, что блок будет отлаживаться нормально, так как в память записывалось состояние счетчика циклов cnt. Попробуйте перед началом отладки блока считывания из памяти занесенное в ячейку 0x0170 значение OA заменить вручную на значение 01 и отладить программу. Выполнится лишь один цикл считывания, так как переменные cnt и tmp хранятся в одном регистре г 16. До начала цикла в регистр г16 командой LDIcnt,ArSize записывается начальное состояние счетчика циклов (10 или $0А). Затем в тот же регистр г16, как в переменную tmp, из памяти считывается значение 01 (команда LDtmp,Z+), далее содержимое регистра г 16, как переменной cnt, декрементируется (DECcnt), становясь равным нулю и приводя к завершению цикла. При присвоении одному регистру нескольких имен переменных, исключайте использование этих имен в одних и тех же блоках программы. Завершая работу, закрываем окно AVR Studio, в ответ на запрос «Сохранить изменения в проекте Метогу.арг?» нажимаем кнопку Да. Теперь в директории C:\Avr\Try\ находится файл проекта Метогу.арг, файл программы SRAM.asm, включенный в проект, файл 8515def.inc, а также файл SRAM.hex, который может быть загружен с помощью программатора и соответствующего программного обеспечения во флеш-память микроконтроллера. При следующем запуске AVR Studio наш проект можно вызвать из меню File. Здесь можно выбрать один из файлов, с которыми мы уже работали. Для нашего проекта следует выбрать строку C:\Avr\Try\Memory.apr. Другой вариант - выполнить Project Open и в появившемся каталоге выбрать необходимый файл проекта (Метогу.арг). В открывшемся окне Project дважды щелкните на имени файла программы SRAM.asm. Теперь все готово к новому сеансу работы с нашим проектом. Подключение буферов вывода с использованием адресного пространства внешней памяти микроконтроллера AT90S8515. [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [ 81 ] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] 0.001 |